Как увеличить кучу NodeJS (--max-old-space-size) в конвейерах Bitbucket для Typescript / Webpack? - PullRequest
0 голосов
/ 08 февраля 2019

У меня проблемы с памятью на этапе упаковки в веб-пакет в проекте без сервера / TypeScript.

Я пробовал:

  • Пакет npm увеличения-памяти-безрезультатно безрезультатно
  • Вызов следующей команды из сценария запуска npm

  • Вызов следующей команды напрямую через bitbucket-pipelines.yml.

    node --max-old-space-size=4096 ./node_modules/.bin/serverless deploy
    

Локально работает с этой командой, но в конвейерах Bitbucket я получаю следующий вывод:

    Serverless: Bundling with Webpack...

    internal/child_process.js:323
        throw errnoException(err, 'spawn');
        ^
    Error: spawn ENOMEM
        at _errnoException (util.js:1022:11)
        at ChildProcess.spawn (internal/child_process.js:323:11)
        at exports.spawn (child_process.js:502:9)
        at Object.exports.fork (child_process.js:103:10)
        at fork (/opt/atlassian/pipelines/agent/build/node_modules/worker-farm/lib/fork.js:17:36)
        at Farm.startChild (/opt/atlassian/pipelines/agent/build/node_modules/worker-farm/lib/farm.js:106:16)
        at Farm.processQueue (/opt/atlassian/pipelines/agent/build/node_modules/worker-farm/lib/farm.js:279:10)
        at Farm.<anonymous> (/opt/atlassian/pipelines/agent/build/node_modules/worker-farm/lib/farm.js:97:21)
        at ontimeout (timers.js:475:11)
        at tryOnTimeout (timers.js:310:5)
        at Timer.listOnTimeout (timers.js:270:5)
    npm ERR! code ELIFECYCLE
    npm ERR! errno 1
    npm ERR! platform-state-machine-import@0.0.2 deploy: `node --max-old-space-size=4096 ./node_modules/.bin/serverless deploy "--stage"    "feattsify" "--region" "us-east-1"`
    npm ERR! Exit status 1
    npm ERR! 
    npm ERR! Failed at the platform-state-machine-import@0.0.2 deploy script.
    npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
    npm ERR! A complete log of this run can be found in:
    npm ERR!     /root/.npm/_logs/2019-02-07T22_37_25_150Z-debug.log

Я много гуглили поиск здесь, чтобы попытаться найти, есть ли у Bitbucket какой-то тип env.переменная, которую вы можете установить для аргументов времени выполнения и т. д., но не можете найти ничего, что не связывалось бы с вышеупомянутым пакетом NPM.

Ответы [ 3 ]

0 голосов
/ 08 февраля 2019

Увеличьте его с помощью команды запуска, например,

 node --max-old-space-size=8192 server.js  
0 голосов
/ 12 февраля 2019

В итоге было два обходных пути для этой проблемы.Сначала возникла ошибка ENOMEM, потому что мне требовалось больше памяти для процесса Node, а во-вторых, потому что память, которую я выделял процессу Node, превысила ту, которая была доступна в среде Bitbucket (по умолчанию 4 ГБ).

Вариант 1:

Использование любых других вариантов ответов И обеспечение достаточного объема памяти в среде конвейера Bitbucket - для меня это означало увеличение размера до 2x (см. эту ссылку).

Вариант 2:

Добавление флага 'transpileOnly' в файл webpack.config.js с использованием ts-loader в качестве вашего транспилятора.Это пропускает проверку типов и экономит память во время пакета / развертывания.ВНИМАНИЕ: Вы все еще должны проверить свой проект при сборке.Для меня это означало запуск tsc перед упаковкой / развертыванием.

rules: [
  // all files with a `.ts` or `.tsx` extension will be handled by `ts-loader`
  { 
    test: /\.tsx?$/, 
    loader: 'ts-loader',
    options: {
      transpileOnly: true
    }
  },
],
0 голосов
/ 08 февраля 2019

Я столкнулся с подобной проблемой некоторое время назад в некоторых задачах сборки Jenkins.Вы можете решить ее, используя переменную окружения NODE_OPTION:

NODE_OPTIONS=--max_old_space_size=4096

Из вашей трассировки стека ошибок, похоже, что новые процессы узла порождаются.Если вы можете установить эту переменную среды, она будет использоваться узлом для передачи аргументов любым новым процессам и, таким образом, порожденным процессам, у которых заканчивается память.

https://nodejs.org/dist/latest-v8.x/docs/api/cli.html#cli_node_options_options

...