是否只有在尚未安装 npm 包时才可以安装它?

Is it possible to install npm package only if it has not been already installed?

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

我需要这个来加速 CircleCI 的测试,但是当我 运行 npm install protractor@2.1.0 等时,它总是从 scracth 下载东西并安装它们,但是,node_modules 文件夹包含所有运行ning 命令(从以前的构建中缓存)和 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

优秀的功能版:

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

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

这适用于 Windows 开发环境。

Here is my solution.

[ $(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 用于查找 protractor 包。

如果没有找到包,会returnnpm ERR! code 1然后npm install protractor@2.1.0安装