ionic framework 프로덕션 빌드시 Out of Memory 문제 해결 방법

ionic 앱 개발 후 (--prod 옵션을 통한) 배포용 빌드시 webpack 작업을 끝내지 못하고 종료됩니다.

ionic 앱 개발 후 (--prod 옵션을 통한) 배포용 빌드시 webpack 작업을 끝내지 못하고 종료됩니다.

--verbose 모드로 빌드했을 때 오류가 발생한 내용입니다.

Node 10버전 / ionic framework 3로 빌드하였습니다.

myApp on  master [$!+] is 📦 v0.0.1 via ⬢ v10.7.0 took 39s 
➜ ionic build --prod --verbose 
  ionic:cli-utils Terminal info: { tty: true, ci: false } +0ms 
  ionic:cli-utils CLI global options: { _: [ 'build' ], help: null, h: null, verbose: true, quiet: null, interactive: true, color: true, confirm: null, json: null, prod: true, project: null, '--': [] } +399ms 
  ionic:cli-utils:lib:environment Environment open. +0ms 
  ionic:cli-utils:lib:project Project type from config: Ionic Angular 3 (ionic-angular) +0ms 
  ionic:cli-utils Project name: undefined +10ms 
  ionic:cli Context: { binPath: '/Users/changjoopark/.nvm/versions/node/v10.7.0/lib/node_modules/ionic/bin/ionic', libPath: '/Users/changjoopark/.nvm/versions/node/v10.7.0/lib/node_modules/ionic', execPath: '/Users/changjoopark/myApp', version: '4.0.2' } +0ms 
  ionic:cli-utils:lib:hooks Looking for ionic:build:before npm script. +0ms 
  ionic:cli-utils:lib:project:ionic-angular:build Looking for ionic:build npm script. +0ms 
> ionic-app-scripts build --prod 
[12:04:24]  ionic-app-scripts 3.1.11 
[12:04:24]  build prod started ... 
[12:04:24]  clean started ... 
[12:04:24]  clean finished in 3 ms 
[12:04:24]  copy started ... 
[12:04:24]  deeplinks started ... 
[12:04:24]  deeplinks finished in 68 ms 
[12:04:24]  ngc started ... 
[12:04:31]  ngc finished in 6.61 s 
[12:04:31]  preprocess started ... 
[12:04:31]  preprocess finished in less than 1 ms 
[12:04:31]  webpack started ... 
[12:04:31]  copy finished in 6.96 s
<--- Last few GCs --->
[16948:0x105000600]    35618 ms: Mark-sweep 1389.1 (1424.9) -> 1388.5 (1425.4) MB, 965.4 / 0.0 ms  (average mu = 0.105, current mu = 0.002) allocation failure scavenge might not succeed
<--- JS stacktrace --->
==== JS stack trace =========================================
0: ExitFrame [pc: 0x4e64b8841bd] 
Security context: 0x3d971e69e6c9 <JSObject> 
    1: typeToTypeNodeHelper(aka typeToTypeNodeHelper) [0x3d97eeca4cb9] [/Users/changjoopark/myApp/node_modules/typescript/lib/typescript.js:~25875] [pc=0x4e64c8139ff](this=0x3d97119822e1 <undefined>,type=0x3d97e7dd9ae9 <TypeObject map = 0x3d976341a5c1>,context=0x3d97b2902b59 <Object map = 0x3d976341d321>) 
    2: symbolToParameterDeclaration(aka sym...
FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory 
 1: 0x1000389cc node::Abort() [/Users/changjoopark/.nvm/versions/node/v10.7.0/bin/node] 
 2: 0x100038ba8 node::FatalTryCatch::~FatalTryCatch() [/Users/changjoopark/.nvm/versions/node/v10.7.0/bin/node] 
 3: 0x1001a9d5a v8::internal::V8::FatalProcessOutOfMemory(v8::internal::Isolate*, char const*, bool) [/Users/changjoopark/.nvm/versions/node/v10.7.0/bin/node] 
 4: 0x100578772 v8::internal::Heap::FatalProcessOutOfMemory(char const*) [/Users/changjoopark/.nvm/versions/node/v10.7.0/bin/node] 
 5: 0x100577729 v8::internal::Heap::PerformGarbageCollection(v8::internal::GarbageCollector, v8::GCCallbackFlags) [/Users/changjoopark/.nvm/versions/node/v10.7.0/bin/node] 
 6: 0x1005753b8 v8::internal::Heap::CollectGarbage(v8::internal::AllocationSpace, v8::internal::GarbageCollectionReason, v8::GCCallbackFlags) [/Users/changjoopark/.nvm/versions/node/v10.7.0/bin/node] 
 7: 0x1005818fc v8::internal::Heap::AllocateRawWithRetry(int, v8::internal::AllocationSpace, v8::internal::AllocationAlignment) [/Users/changjoopark/.nvm/versions/node/v10.7.0/bin/node] 
 8: 0x100550294 v8::internal::Factory::NewFillerObject(int, bool, v8::internal::AllocationSpace) [/Users/changjoopark/.nvm/versions/node/v10.7.0/bin/node] 
 9: 0x1007daf84 v8::internal::Runtime_AllocateInNewSpace(int, v8::internal::Object**, v8::internal::Isolate*) [/Users/changjoopark/.nvm/versions/node/v10.7.0/bin/node] 
10: 0x4e64b8841bd 
[ERROR] Non-zero exit from subprocess. 
  ionic:cli-utils:lib:environment Environment closed. +39s
FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed — JavaScript heap out of memory

위 에러와 함께 webpack 프로세스가 멈춥니다.

이는 기본 Node.js 가용 메모리가 빌드하기에 충분하지 않아 발생하는 오류입니다.

package.jsonscriptsionic:build 스크립트를 추가하면 해결됩니다

"scripts": { 
    "start": "ionic-app-scripts serve", 
    "clean": "ionic-app-scripts clean", 
    "build": "ionic-app-scripts build", 
    "lint": "ionic-app-scripts lint", 
    "ionic:build": "node --max-old-space-size=8192 --stack-size=1968 node_modules/@ionic/app-scripts/bin/ionic-app-scripts.js build" 
  },

--max-old-space-size=4096으로 해도 실패하는 경우가 있어 _8192_로 지정했습니다.

Subscribe to Half-Built Life

Don’t miss out on the latest issues. Sign up now to get access to the library of members-only issues.
jamie@example.com
Subscribe