Node.js 如何为不同的项目同时运行npm安装

Node.js 如何为不同的项目同时运行npm安装,node.js,shell,npm,npm-install,Node.js,Shell,Npm,Npm Install,我正在创建一个构建,它实际上由3个不同的项目组成。对于其中的两个,我需要进行npm安装,对于第三个,我需要在打包和创建构建之前进行bower安装。因此,我在这里寻找优化机会,并创建了以下脚本: 安装依赖项。sh # $1 = project_1 $2=project_2 $3=project_3 npm install --global bower ng-cli && <!-- This runs 1st --> echo "Global

我正在创建一个构建,它实际上由3个不同的项目组成。对于其中的两个,我需要进行npm安装,对于第三个,我需要在打包和创建构建之前进行bower安装。因此,我在这里寻找优化机会,并创建了以下脚本:

安装依赖项。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 -->

如果可能的话,请帮我解决这个问题。如果不是,那么解决这个问题的最佳方法是什么。

并行构建的问题可能会被停靠。例如,一个用于在$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运行
  • 以交互方式-
    -it
  • 流程完成后的清理-
    --rm
  • 将项目目录装载到容器目录
    /srv
    -
    -v$(pwd)/$1:/srv
  • 设置工作目录-
    -w=/srv
  • 使用图像-
    节点:8.11.3
  • 命令是-
    npm install--global bower ng cli&&npm install&&npm install--only dev&&npm run build\u 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'"

请注意,本例中的命令不是用于演示目的的精确猴子输入,也未经过测试。

这些项目是否相互依赖,如使用
npm link
?如果是,那么可能并行安装不是这里的选项。不,它们是独立的。它们有不同的package.json文件,并且它们只共享相同的节点版本。默认值:Posix上的
~/.npm
,或Windows上的
%AppData%/npm缓存
。那么,如果您同时运行它们,它们是否可以尝试修改相同的缓存,从而导致随机错误?如果你一个接一个地安装它们,它们是否安装正确?是的,按顺序运行效果很好快速搜索指向许多相关问题:-我不知道它们是否有解决方案,但直觉上我会查看
docker
,在docker容器中运行build。你的解决方案看起来很棒,我认为可以解决我的问题。我现在会投票,因为我下班了,我会在某个时候尝试,并接受你的答案。非常感谢您抽出时间。非常感谢。
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'"