45

是否可以npm仅在尚未安装软件包的情况下安装软件包?

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

拥有这样的单行命令是完美的:

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

但它也会检查包的版本。

4

5 回答 5

45

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

用于npm list protractor查找protractor包的位置。

如果找不到该包,它将返回npm ERR! code 1npm install protractor@2.1.0进行安装

于 2017-08-23T07:15:44.173 回答
24

用 bash 你可以做

[ $(node -p "require('protractor/package.json').version") != "2.1.0" ] && npm install protractor@2.1.0
于 2015-06-05T13:44:20.033 回答
10

@JeromeWAGNER出色答案的函数版本:

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
于 2015-06-05T14:09:03.157 回答
2
[ $(node -p "try{require('protractor/package.json').version}catch(e){}") != "2.1.0" ]  && npm install grunt
于 2016-05-27T00:48:38.030 回答
0

我遇到了同样的问题,想从任何需要它们的“package.json”文件中安装全局依赖项。

这是针对 Windows 开发环境的。

这是我的解决方案

于 2015-12-31T19:06:41.077 回答