簡體   English   中英

如何判斷bash中是否安裝了npm模塊

[英]How to determine if npm module installed in bash

我的目標是僅在 npm package 不可用的情況下安裝它。 即使我已經全局安裝了模塊,這也會繼續執行。

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

如何調整它以檢測它何時安裝在全局范圍內?

如果你想要一個班輪:

當地的

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

全球的:

npm list -g | grep widdershins || npm install -g widdershins --no-shrinkwrap
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檢查給定參數是否為目錄(如果是則返回真)
  • ! 是否定運算符,在我們的例子中是否定 -d 結果
  • -o是邏輯或運算符

把它們加起來:

  • 第一個代碼:如果 $package 已安裝,則 -eq 結果為假,這將導致 if 語句為假。 如果未安裝 $package,則 -eq 結果為真(if 語句也為真)。
  • 第二段代碼:除了第一段代碼的描述外,如果node_module是一個目錄,則if語句為假。 如果 node_module 不是目錄,則 if 語句為真。 由於邏輯或連接,這與 -eq 結果無關。

也可以幫助你。

這對我有用:

package_name='widdershins'
if [[ "$(npm list -g $package_name)" =~ "empty" ]]; then
    echo "Installing $package_name ..."
    npm install -g $package_name
else
    echo "$package_name is already installed"
fi

npm list -g package-name未安裝時返回空,因此您可以檢查它是否包含字符串空

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM