我使用过 Angular 5
我尝试ng build --prod
显示这个错误:
FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory
我已经阅读了这个和这个并改变-max_old_space_size了package.json但没有构建生产再次显示上述错误。
有什么问题?怎么解决?是package.json的问题吗?
包.json:
{
"name": "asd",
"version": "0.6.2",
"license": "MIT",
"angular-cli": {},
"scripts": {
"build:dev": "./node_modules/.bin/ng build",
"build:prod": "./node_modules/.bin/ng build --prod --aot=false",
"build:aot": "./node_modules/.bin/ng build --prod --aot",
"build:aot2": "node --max_old_space_size=4096 ./node_modules/.bin/ng build --prod --aot",
"build": "npm run build:dev",
"clean:dist": "npm run rimraf -- dist",
"clean:install": "npm set progress=false && npm install",
"clean:start": "npm start",
"clean": "npm cache clean && npm run rimraf -- node_modules doc coverage dist",
"e2e:live": "npm run e2e -- --elementExplorer",
"e2e": "npm run protractor",
"lint": "npm run tslint \"src/**/*.ts\"",
"prebuild:dev": "npm run clean:dist",
"prebuild:prod": "npm run clean:dist",
"preclean:install": "npm run clean",
"preclean:start": "npm run clean",
"protractor": "protractor",
"rimraf": "rimraf",
"server:dev": "./node_modules/.bin/ng serve",
"serve": "npm run server:dev",
"start": "npm run server:dev",
"test": "./node_modules/.bin/ng test",
"tslint": "tslint",
"typedoc": "typedoc",
"ng": "ng",
"pree2e": "webdriver-manager update --standalone false --gecko false"
},
"private": true,
....
}
Run Code Online (Sandbox Code Playgroud)
小智 21
此时升级 Angular 不会解决问题(但将来可能会)。我的 Angular 7 和 8 项目也在我的 Windows 机器上得到了它。
看起来您可能需要更新 package.json 中的内存增加。这是一个似乎已经为很多人解决了这个问题的链接,我认为您必须在节点模块中指定 Angular CLI 的路径。
代替
node --max_old_space_size=4096 ./node_modules/.bin/ng build --prod --aot
Run Code Online (Sandbox Code Playgroud)
尝试
node --max_old_space_size=4096 node_modules/@angular/cli/bin/ng build --prod --aot
Run Code Online (Sandbox Code Playgroud)
解决方案中的这条路径在Angular 4 中看起来是正确的。
小智 5
在 cmd 提示符中运行以下命令:
node --max_old_space_size=8192 node_modules/@angular/cli/bin/ng build --prod
Run Code Online (Sandbox Code Playgroud)
我相信这会解决你的问题。
小智 5
第一种方式:
运行为:
node --max_old_space_size=8048 ./node_modules/@angular/cli/bin/ng serve
Run Code Online (Sandbox Code Playgroud)
其中 8048 是新的内存限制(以兆字节为单位)(默认情况下约为 1500)。或者将命令添加到 package.json 文件中:
"build-serve": "node --max_old_space_size=8048 ./node_modules/@angular/cli/bin/ng serve"
Run Code Online (Sandbox Code Playgroud)
并作为 npm run build-serve 运行
或者另一种方式:适用于 Windows 的快速有效的解决方案
打开 C:\Users\用户名\%AppData%\Roaming\npm
将以下代码复制/粘贴到您的 ng.cmd 中:
@IF EXIST "%~dp0\node.exe" (
"%~dp0\node.exe" --max_old_space_size=8048 "%~dp0\node_modules\@angular\cli\bin\ng" %*
) ELSE (
@SETLOCAL
@SET PATHEXT=%PATHEXT:;.JS;=;%
node --max_old_space_size=8048 "%~dp0\node_modules\@angular\cli\bin\ng" %*
)
Run Code Online (Sandbox Code Playgroud)