只有在尚未安装npm包的情况下是否可以安装?

只有在尚未安装npm包的情况下是否可以安装?

我需要这个来加快对CircleCI的testing,但是当我运行npm install protractor@2.1.0等时,它总是从scracth下载东西并安装它们,但是,所有模块的node_modules文件夹在运行命令时已经存在从以前的版本caching)和protractor --version等显示所需的版本的包。

它是完美的有这样一些单行命令:

 protractor --version || npm install -g protractor@2.1.0 

但也会检查包的版本。

用bash你可以做

 [ $(node -p "require('protractor/package.json').version") != "2.1.0" ] && npm install protractor@2.1.0 

由@JeromeWAGNER提供的优秀答案的function版本:

 function install_package_if_needed() { local p=${1:-Package required} local v=${2:-Version required} shift 2 local i=$(node -p "require('$p/package.json').version" 2>/dev/null) [ "$i" == "$v" ] || npm "$@" install "$p@$v" } 

使用像:

 $ install_package_if_needed protractor 2.1.0 

要将附加选项传递给npm ,请在版本之后指定它们,如下所示:

 $ install_package_if_needed protractor 2.1.0 -g 
 [ $(node -p "try{require('protractor/package.json').version}catch(e){}") != "2.1.0" ] && npm install grunt 

你可以试试npm list protractor || npm install protractor@2.1.0 npm list protractor || npm install protractor@2.1.0

其中npm list protractor用于findprotractor包。

如果没有find包,它将返回npm ERR! code 1 npm ERR! code 1 ,并npm install protractor@2.1.0

我有同样的问题,想要从任何“package.json”文件要求他们安装全局依赖关系。

这是针对Windows开发环境的。

这是我的解决scheme 。