2017-09-27 8 views
2

我正在測試一個更大的NPM軟件包庫,它由私有軟件包,公共軟件包的已更改分支或公共軟件包的下游組成。檢查package.json是否在shell腳本中使用特定名稱的腳本而不使用額外的NPM軟件包

lib 
    |-package_1 
    |-package_2 
    |-package_N 

所以我正在通過我的包的lib一個shell腳本,在每個目錄npm test命令運行。

for D in *; do 
    if [ -d "${D}" ]; then 
     echo "=================================" 
     echo "${D}" # PRINT DIRECTORY NAME 
     echo "=================================" 

     cd $D 
     npm run tests 
     cd ../ # LEAVE PACKAGE DIR 
    fi 
done 

不幸的是,在包的JSON文件中命名測試腳本沒有獨特的模式。一些軟件包在test下運行,其腳本的手錶模式爲,併爲其cli腳本命名(主要命名爲testcli)。

我想要做的是一樣的東西以下僞代碼:

if has-testcli-script then 
    npm run testcli 
else 
    npm run test 

我認爲就目前而言,只有那些存在兩種選擇。我非常感興趣的是知道腳本是否存在,而無需安裝額外的全局NPM軟件包。

回答

2

由於至少npm版本2.11.4,調用npm run不帶任何參數將列出所有可運行的腳本。使用它你可以檢查你的腳本是否存在。因此,像:

has_testcli_script() { 
    [[ $(npm run | grep "^ testcli" | wc -l) > 0 ]] 
} 

if has_testcli_script; then 
    npm run testcli 
else 
    npm test 
fi 

或者,只是檢查,看看你的腳本是直接的package.json文件:

has_testcli_script() { 
    [[ $(cat package.json | grep "^ \"testcli\":" | wc -l) > 0 ]] 
}