代码之家  ›  专栏  ›  技术社区  ›  Ben

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

  •  5
  • Ben  · 技术社区  · 8 年前

    我的目标是只安装这个npm包,如果它还不可用的话。即使我已经在全球范围内安装了模块,这也会继续执行。

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

    如何调整此设置以检测何时在全球范围内安装?

    2 回复  |  直到 8 年前
        1
  •  17
  •   OZZIE    7 年前

    如果您想要一行:

    地方的

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

    全球:

    npm list -g | grep widdershins || npm install -g widdershins --no-shrinkwrap
    
        2
  •  6
  •   Rene Knop    8 年前
    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 是逻辑or运算符

    综上所述:

    • 第一个代码:如果安装了$包,则-eq结果为false,这将导致if语句为false。如果未安装$package,则-eq结果为true(If语句也为true)。
    • 第二个代码:除了第一个代码的描述之外,如果node\u模块是一个目录,那么if语句为false。如果node\u模块不是目录,则If语句为true。由于逻辑or连接,这与-eq结果无关。

    This 也可以帮助你。