#node.js #angular #docker #angular-cli-v6
#node.js #угловой #docker #angular-cli-v6
Вопрос:
Когда я пытаюсь создать проект angular7 внутри docker, это занимает около 40 минут. Строка, которая занимает 40 минут,
ng build —prod
92% оптимизация ресурсов TerserPlugin
Я запустил ng build —prod вне docker на том же ноутбуке, это занимает 2 минуты.
Я пытался добавить —build-optimizer false
и —sourceMap=false
Не имеет никакого значения
Вот мой файл Dockerfile
FROM node:carbon
WORKDIR /usr/src/app
COPY package.json package-lock.json ./
RUN npm install
RUN npm install -g @angular/cli@6.1.0
COPY . .
RUN ng build --prod
EXPOSE 4200
CMD [ "npm", "start" ]
HEALTHCHECK --interval=5s --timeout=30s --retries=20 CMD curl --fail http://localhost:4200 || exit 1
Комментарии:
1. около 2-3 минут
2. Почему бы вам не создать свое приложение angular перед запуском docker build>
3. У вас есть журналы docker?
4. @wentjun Выполнение сборки на хост-компьютере, а затем копирование содержимого, вероятно, не очень хорошая идея.
5. Я в замешательстве… почему используется angular 6.1.0 cli? Я думаю, что проблемы с сборкой были устранены в более новой версии cli 6795
Ответ №1:
Эта проблема с чрезвычайно медленными сборками почти всегда связана с нехваткой памяти в процессе сборки.
Узел не будет выделять много памяти для одного процесса (512 МБ в 32-битных системах и 1 ГБ в 64-битных системах), но при работе ng build
с производственными настройками используется много памяти.
Вы можете использовать параметр узла, max_old_space_size
чтобы установить, сколько оперативной памяти вы разрешаете использовать процессу, но вы должны передать параметр непосредственно в узел, поэтому замените
ng build --prod
с
node --max_old_space_size=8192 ./node_modules/@angular/cli/bin/ng build --prod
для этого процесса будет выделено до 8 ГБ оперативной памяти, что значительно ускорит его выполнение.
Вы также можете добавить это в свои скрипты в package.json:
"scripts": {
....
"build:prod": "node --max_old_space_size=4096 ./node_modules/@angular/cli/bin/ng build --prod"
}
(Если увеличение лимита памяти не работает, попробуйте запустить ng build --prod --verbose
, чтобы увидеть точные тайминги для разных этапов компиляции)
Комментарии:
1. вот хорошая статья (не зависящая от angular, только о nodejs) developer.ibm.com/articles /…
2. И если вы используете Mac, не забудьте также увеличить лимит памяти Docker.
3. не работает с docker: (
Ответ №2:
Как упоминал Даниэль в ответе, вы можете использовать параметр node --max_old_space_size
, но я предпочитаю настраивать его через environment var:
NODE_OPTIONS=--max-old-space-size=4096
Комментарии:
1. не работает с docker: (
2. @JRichardsz передайте его узлу таким образом в вашем пакете.json: «start»: «export NODE_OPTIONS= «—openssl-legacy-provider —max-old-space-size = 8192 «; ng serve —host 0.0.0.0»
3. Спасибо @grantwparks, я попробую!