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

时间:2018-05-22 19:44:03

标签: bash npm

我的目标是只安装此npm包,如果它尚未提供。即使我已在全球范围内安装模块,这仍将继续执行。

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

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

2 个答案:

答案 0 :(得分:2)

如果您想要一支班轮:

本地

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

全局:

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

答案 1 :(得分: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等于$ b,则$a -eq $b返回true,否则返回false。
  • -d检查给定的参数是否是目录(如果是,则返回true)
  • !是否定运算符,在我们的例子中是否定-d result
  • -o是逻辑或运算符

总结一下:

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

This也可以帮到你。