Jan*_*nkt 5 bash shell node.js npm package.json
我正在测试一个更大的NPM包库,它包含私有包,公共包的变更分叉或公共包的下游.
lib
|-package_1
|-package_2
|-package_N
Run Code Online (Sandbox Code Playgroud)
所以我通过我的包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
Run Code Online (Sandbox Code Playgroud)
遗憾的是,在程序包的JSON文件中没有用于命名tests-script的唯一模式.某些程序包在test
具有监视模式的脚本下运行,并且其cli脚本具有不同的名称(主要是命名testcli
).
我想做的是类似下面的伪代码:
if has-testcli-script then
npm run testcli
else
npm run test
Run Code Online (Sandbox Code Playgroud)
我现在假设,只有这两个选项存在.我对如何知道脚本是否存在感兴趣,而不安装额外的全局NPM包.
至少从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
Run Code Online (Sandbox Code Playgroud)
或者,只需检查您的脚本是否直接在package.json文件中:
has_testcli_script () {
[[ $(cat package.json | grep "^ \"testcli\":" | wc -l) > 0 ]]
}
Run Code Online (Sandbox Code Playgroud)