亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

詳解基于node的前端項目編譯時內(nèi)存溢出問題

 更新時間:2017年08月01日 15:32:20   作者:weiwei  
本篇文章主要介紹了基于node的前端項目編譯時內(nèi)存溢出問題,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

前段時間公司有個基于vue的項目在運行npm run build的時候會報內(nèi)存溢出,今天在某個技術(shù)流交群也有位小伙伴基于angular的項目也出現(xiàn)了這個問題,所以查了一些相關(guān)的資料總結(jié)了一下,下面會詳細說明前端三大框架編譯時遇到這個問題具體怎么解決。首先看我模擬出的報錯內(nèi)容

具體截圖如下

里面有句關(guān)鍵的話,CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory JavaScript堆內(nèi)存不足,這里說的 JavaScript 其實就是 Node,我們都知道 Node 是基于V8引擎,在一般的后端開發(fā)語言中,在基本的內(nèi)存使用上沒有什么限制,但是我去查閱了相關(guān)的資料才發(fā)現(xiàn),在 Node 中通過 JavaScript 使用內(nèi)存時只能使用部分內(nèi)存(64位系統(tǒng)下約為1.4 GB,32位系統(tǒng)下約為0.7 GB),這就是我們編譯項目時為什么會出現(xiàn)內(nèi)存泄露了,因為前端項目如果非常的龐大,webpack 編譯時就會占用很多的系統(tǒng)資源,如果超出了V8對 Node 默認的內(nèi)存限制大小就會出現(xiàn)剛剛我截圖的那個錯誤了,那怎么解決呢?V8依然提供了選項讓我們使用更多的內(nèi)存。Node 在啟動時可以傳遞 --max-old-space-size 或 --max-new-space-size 來調(diào)整內(nèi)存大小的使用限制,示例如下

node --max-old-space-size=1700 test.js // 單位為MB
// 或者
node --max-new-space-size=1024 test.js // 單位為KB

上述參數(shù)在V8初始化時生效,一旦生效就不能再動態(tài)改變。如果遇到 Node 無法分配足夠內(nèi)存給 JavaScript 的情況,可以用這個辦法來放寬V8默認的內(nèi)存限制,避免在執(zhí)行過程中稍微多用了一些內(nèi)存就輕易崩潰,既然知道了解決辦法那就好辦了,下面來分別詳細說明三大框架下的具體操作。

Vue

先說vue,因為vue是最簡單的,因為基于 vue-cli 生成的項目,vue沒有把 package.json 里面 scripts 字段的腳本命令的node命令隱藏起來,我們直接把上面v8提供的選項參數(shù)直接寫入scripts 字段的 node 命令后就好了,示例如下

"build": "node --max_old_space_size=4096 build/build.js"

直接在 node 后面寫上 --max_old_space_size=4096 就好了,我這里設(shè)置的內(nèi)存大小是4G,這個具體的大小可以根據(jù)自己的項目情況來設(shè)置就好了。然后再重新運行 npm run build 就可以正常打包構(gòu)建了。

React

下面來說說 react ,首先如果自己的 react 項目的開發(fā)打包環(huán)境是自己搭建的話,那解決方法就和上面的 vue 一樣,在 node 命令后面加上 --max_old_space_size=4096 就好了,如果是基于 react-cli 生成的項目那就接著看吧,基于react-cli 生成的項目我們發(fā)現(xiàn)package.json 里面 scripts 字段的內(nèi)容如下

"scripts": {
 "start": "react-scripts start",
 "build": "react-scripts build",
 "test": "react-scripts test --env=jsdom",
 "eject": "react-scripts eject"
}

這個就和 vue-cli 不一樣了,運行npm run build的時候跑的實際代碼是 react-scripts build, 這個腳本是來源于哪里呢,我們打開項目根目錄mode_modeles文件夾,會看到一個.bin的目錄,react-scripts腳本就定義在這里,在.bin目錄下可以找到一個叫react-scripts的文件,打開這個文件,我們發(fā)現(xiàn)里面就是一些javascript代碼,這個代碼的首行有些特殊,我們可以看到#!/usr/bin/env node一行這樣的代碼,它的意思就是,用當前電腦/usr/bin/env目錄下的node來運行該文件里面的javascript代碼,看到這里我們都明白了,回到我們最初要解決的問題,我們可以把--max_old_space_size=4096這行代碼寫在#!/usr/bin/env node后面,#!/usr/bin/env node --max_old_space_size=4096,這樣就好了,我們的內(nèi)存溢出問題也就解決了。

Angular

最后開始說 angular ,當然這里說的 angular 是 angular 的最新版本不是angularjs,寫angular應用我們一般也都會用angular-cli來搭建項目,如果是自己搭建的開發(fā)編譯那解決辦法和上面的vue是一樣的了。用angular-cli來生成的項目也和react一樣,cli把node命令也隱藏起來了,package.json 里面 scripts 字段的內(nèi)容如下

"scripts": {
 "ng": "ng",
 "start": "ng serve",
 "build": "ng build",
 "test": "ng test",
 "lint": "ng lint",
 "e2e": "ng e2e"
}

這里的ng命令也和react一樣,定義在項目根目錄mode_modeles文件夾下的.bin目錄里面,.bin目錄下我們能找到一個叫ng的文件,在該文件的首行寫上#!/usr/bin/env node --max_old_space_size=4096,這樣也就可以解除v8對node的內(nèi)存使用限制了。

參考

深入淺出Node.js

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 詳解兩個Node.js進程是如何通信

    詳解兩個Node.js進程是如何通信

    進程間通信是是Node.js的一個十分重要的部分,這篇文章主要給大家介紹了關(guān)于兩個Node.js進程是如何通信的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2021-10-10
  • Nodejs使用express連接數(shù)據(jù)庫mongoose的示例

    Nodejs使用express連接數(shù)據(jù)庫mongoose的示例

    數(shù)據(jù)庫并進行操作通常需要使用第三方庫,其中最流行的是mongoose,本文主要介紹了Nodejs使用express連接數(shù)據(jù)庫mongoose的示例,具有一定的參考價值,感興趣的可以了解一下
    2024-06-06
  • Node.js實現(xiàn)批量下載圖片簡單操作示例

    Node.js實現(xiàn)批量下載圖片簡單操作示例

    這篇文章主要介紹了Node.js實現(xiàn)批量下載圖片簡單操作,結(jié)合實例形式分析了node.js批量下載圖片的具體步驟與相關(guān)實現(xiàn)技巧,需要的朋友可以參考下
    2020-01-01
  • nodeJS進程管理器pm2的使用

    nodeJS進程管理器pm2的使用

    這篇文章主要介紹了nodeJS進程管理器pm2的使用,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-01-01
  • node.js使用require()函數(shù)加載模塊

    node.js使用require()函數(shù)加載模塊

    本文通過幾個具體實例來分析node.js中使用require()函數(shù)來加載模塊的方法。非常的詳盡,給需要的小伙伴們參考下吧
    2014-11-11
  • nodejs 最新版安裝npm 的使用詳解

    nodejs 最新版安裝npm 的使用詳解

    本篇文章主要介紹了nodejs 最新版安裝npm 的使用詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-01-01
  • node.js中的fs.utimes方法使用說明

    node.js中的fs.utimes方法使用說明

    這篇文章主要介紹了node.js中的fs.utimes方法使用說明,本文介紹了fs.utimes的方法說明、語法、接收參數(shù)、使用實例和實現(xiàn)源碼,需要的朋友可以參考下
    2014-12-12
  • 使用node.js中的Buffer類處理二進制數(shù)據(jù)的方法

    使用node.js中的Buffer類處理二進制數(shù)據(jù)的方法

    大家應該都知道在客戶端JavaScript腳本代碼中,對二進制數(shù)據(jù)并沒有提供一個很好的支持。然而,在處理TCP流或文件流時,必須要處理二進制數(shù)據(jù)。因此,下面通過這篇文章來一起看看利用node.js中的Buffer類處理二進制數(shù)據(jù)的方法,有需要的朋友們可以參考借鑒。
    2016-11-11
  • Node.JS發(fā)送http請求批量檢查文件中的網(wǎng)頁地址、服務是否有效可用

    Node.JS發(fā)送http請求批量檢查文件中的網(wǎng)頁地址、服務是否有效可用

    這篇文章主要介紹了Node.JS發(fā)送http請求批量檢查文件中的網(wǎng)頁地址、服務是否有效可用,本文通過實例代碼文字說明給大家講解的非常詳細,需要的朋友參考下
    2019-11-11
  • 使用 node.js 模仿 Apache 小部分功能

    使用 node.js 模仿 Apache 小部分功能

    這篇文章主要介紹了使用 node.js 模仿 Apache 小部分功能,文中給大家講到了服務端渲染與客戶端渲染之間的區(qū)別,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-07-07

最新評論