【问题标题】: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"),这不是与您想要的相反吗?

标签: bash npm


【解决方案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 行
  • 好的,如果我理解正确,那么我认为您还有另一个问题:基于缺少依赖项的问题。也许在这篇文章中你会找到帮助:stackoverflow.com/questions/41275301/…
【解决方案2】:

如果你想要一个班轮:

本地

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

全球:

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

【讨论】:

    猜你喜欢
    • 2016-02-27
    • 1970-01-01
    • 2016-11-28
    • 1970-01-01
    • 1970-01-01
    • 2013-11-02
    • 1970-01-01
    • 2021-01-04
    • 1970-01-01
    相关资源
    最近更新 更多