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

时间:2015-06-05 13:01:54

标签: node.js bash npm circleci

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

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

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

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

但也会检查包的版本。

5 个答案:

答案 0 :(得分:18)

用bash你可以做到

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

答案 1 :(得分:13)

您可以尝试npm list protractor || npm install protractor@2.1.0

使用npm list protractor查找protractor包。

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

答案 2 :(得分:8)

优秀answer by @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

答案 3 :(得分:2)

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

答案 4 :(得分:0)

我有同样的问题,想要从任何" package.json"安装全局依赖项。需要它们的文件。

这适用于Windows开发环境。

Here is my solution