只有在尚未安装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 。