Как я могу запустить установку npm для разных проектов одновременно - PullRequest
0 голосов
/ 30 октября 2018

Я создаю сборку, которая на самом деле состоит из 3 разных проектов. Для 2 из них мне нужно выполнить npm install, а для третьего мне нужно сделать bower install перед упаковкой и созданием сборки. Поэтому я искал возможность оптимизации здесь и создал этот скрипт:

install_dependency.sh

# $1 = project_1 $2=project_2 $3=project_3

npm install --global bower ng-cli &&              <!-- This runs 1st -->
echo "Global Installation complete" &&            <!-- This runs 2nd -->
node --version && npm --version &&                <!-- This runs 3rd -->
parallel --halt 2 ::: \                           <!-- From here till END runs in parallel -->
"cd $1; npm install" \
"cd $1; npm install --only=dev" \
"cd $2; npm install" \
"cd $2; npm install --only=dev" \                 <!-- "END" Till here it runs parallel-->
"cd $3; bower --allow-root install" && echo All is OK &&    <!-- It runs next -->
cd $1; npm run build_stage && echo build created && <!-- It runs next --> 
cd $2; npm run build  && echo build created    <!-- It runs next -->

Но, похоже, я не могу запустить npm install параллельно, так как это вызывает некоторые конфликты и приводит к сбоям со случайной ошибкой, подобной этой:

> node-sass@4.9.4 install /data/project/uiv2/node_modules/node-sass
> node scripts/install.js

npm WARN deprecated typings@1.5.0: Typings is deprecated in favor of NPM @types -- see README for more information
npm WARN deprecated browserslist@2.11.3: Browserslist 2 could fail on reading Browserslist >3.0 config used in other tools.
npm WARN deprecated gulp-util@3.0.7: gulp-util is deprecated - replace it, following the guidelines at https://medium.com/gulpjs/gulp-util-ca3b1f9f9ac5
npm WARN deprecated hoek@2.16.3: The major version is no longer supported. Please update to 4.x or newer
module.js:550
    throw err;
    ^

Error: Cannot find module 'inherits'
    at Function.Module._resolveFilename (module.js:548:15)

Пожалуйста, помогите мне решить эту проблему, если это возможно. Если это не так, что может быть лучшим способом решить эту проблему.

1 Ответ

0 голосов
/ 30 октября 2018

Проблема с параллельными сборками, вероятно, может быть докеризована. Например, одна команда для построения в $ 1:

docker run -it --rm -v $(pwd)/$1:/srv -w=/srv node:8.11.3 "npm install && npm install --only-dev && npm run build_stage && echo build created"

Тогда у вас нет каталога изменений событий. Что это будет делать:

  • docker run
  • в интерактивном режиме - -it
  • очистка после завершения процесса - --rm
  • смонтировать каталог проекта в каталог контейнера /srv - -v $(pwd)/$1:/srv
  • установить рабочий каталог - -w=/srv
  • с использованием изображения - node:8.11.3
  • и команда - npm install --global bower ng-cli && npm install && npm install --only-dev && npm run build_stage && echo build created

После завершения проект под $1 будет построен так, как если бы он был построен на хост-машине.

Тогда у вас будет три таких команды (согласно вашему сценарию), и вы сможете запускать их параллельно. Для иллюстрации сценария:

parallel --halt 2 ::: \ 
  "docker run -it --rm -v $(pwd)/$1:/srv -w=/srv \
    node:8.11.3 sh -c 'npm install --global bower ng-cli && npm install && npm install --only-dev && npm run build_stage && echo $1 build created'"
  "docker run -it --rm -v $(pwd)/$2:/srv -w=/srv \
    node:8.11.3 sh -c 'npm install --global bower ng-cli && npm install && npm install --only-dev && npm run build && echo $2 build created'"
  "docker run -it --rm -v $(pwd)/$3:/srv -w=/srv \
    node:8.11.3 sh -c 'npm install --global bower ng-cli && bower --allow-root install'"

Обратите внимание, что команды в этом примере не являются точными наборами обезьян для иллюстрации и не проверены.

...