Node.js 如何为不同的项目同时运行npm安装
我正在创建一个构建,它实际上由3个不同的项目组成。对于其中的两个,我需要进行npm安装,对于第三个,我需要在打包和创建构建之前进行bower安装。因此,我在这里寻找优化机会,并创建了以下脚本: 安装依赖项。shNode.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
# $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'"