如何确定 bash 中是不是安装了 npm 模块

Posted

技术标签:

【中文标题】如何确定 bash 中是不是安装了 npm 模块【英文标题】:How to determine if npm module installed in bash如何确定 bash 中是否安装了 npm 模块 【发布时间】:2018-11-01 16:14:52 【问题描述】:

我的目标是仅在此 npm 包不可用时才安装它。即使我已经全局安装了模块,它也会继续执行。

if [ npm list -g widdershins &> /dev/null ] || [ ! -d node_modules ]; then
    npm install widdershins --no-shrinkwrap
fi

如何调整它以检测何时全局安装?

【问题讨论】:

如果模块已安装,则第一个子句的退出状态为 0 ("true"),这不是与您想要的相反吗? 【参考方案1】:
package='widdershins'
if [ `npm list -g | grep -c $package` -eq 0 ]; then
    npm install $package --no-shrinkwrap
fi

包括目录检查的替代方法:

package='widdershins'
if [ `npm list -g | grep -c $package` -eq 0 -o ! -d node_module ]; then
    npm install $package --no-shrinkwrap
fi

说明:

npm list -g 列出所有已安装的软件包 grep -c $package 打印包含 $package 的行数(在我们的例子中被替换为 'widdershins') -eq 是一个等号检查,例如$a -eq $b 如果 $a 等于 $b 则返回 true,否则返回 false。 -d 检查给定参数是否为目录(如果是则返回 true) ! 是否定运算符,在我们的例子中是否定 -d 结果 -o 是逻辑或运算符

总结一下:

第一个代码:如果安装了 $package,则 -eq 结果为假,这将导致 if 语句为假。如果 $package 没有安装,那么 -eq 结果为真(if 语句也为真)。 第二段代码:除了第一段代码的描述外,如果node_module是一个目录,则if语句为假。如果 node_module 不是目录,则 if 语句为真。由于逻辑或连接,这与 -eq 结果无关。

This 也可以帮到你。

【讨论】:

这似乎不太奏效。 widdershins@3.4.0npm list -g 的输出中,但它仍在尝试安装 -eq 0 -o 是做什么的? -eq 是一个等号检查。如果左运算符等于右运算符,则返回 true。 grep -c $package 计算所有包含 $package 的行(在这种情况下,所有包含字符串 'widdershins' 的行,对于 'widdershins@3.4.0' 也是如此)。这意味着:如果安装了 widdershins 包,则 npm list -g | grep -c $package 返回 1,这不等于 0(1 -eq 0 为假)。 -o 是逻辑 or 运算符。它将 -eq 结果与目录检查结果连接起来(! -d node_module,如果 node_modules 不是目录,则为真)。希望这会有所帮助。 我认为问题在于它把它放在第 1 行,npm ERR! peer dep missing: mkdirp@>=0.5.0, required by mkdirp-promise@1.1.0 然后计数实际上显示在第 2 行 好的,如果我理解正确,那么我认为您还有另一个问题:基于缺少依赖项的问题。也许在这篇文章中你会找到帮助:***.com/questions/41275301/…【参考方案2】:

如果你想要一个班轮:

本地

npm list | grep widdershins || npm install widdershins --no-shrinkwrap

全球:

npm list -g | grep widdershins || npm install -g widdershins --no-shrinkwrap

【讨论】:

以上是关于如何确定 bash 中是不是安装了 npm 模块的主要内容,如果未能解决你的问题,请参考以下文章

使用npm直接从github repo安装加载模块

安装好grunt,cmd 提示"grunt不是内部或外部命令" 怎么办

require("electron").app 未定义。我 npm 安装了新的模块。不确定该怎么做

npm全局安装包的原理

npm全局安装包的原理

npm全局安装包的原理