我正在测试一个更大的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文件中没有用于命名tests-script的唯一模式。某些软件包在test
脚本下运行 watch-mode ,并且其cli脚本的名称不同(主要名为testcli
)。
我想做的是类似下面的伪代码:
if has-testcli-script then
npm run testcli
else
npm run test
我现在假设,只存在这两个选项。我对如何知道脚本是否存在感兴趣,而不安装额外的全局NPM包。
答案 0 :(得分:6)
Since npm version 2.11.4 at least, calling npm run
with no arguments will list all runable scripts. Using that you can check to see if your script is present. So something like:
has_testcli_script () {
[[ $(npm run | grep "^ testcli" | wc -l) > 0 ]]
}
if has_testcli_script; then
npm run testcli
else
npm test
fi
Or alternatively, just check to see if your script is in the package.json file directly:
has_testcli_script () {
[[ $(cat package.json | grep "^ \"testcli\":" | wc -l) > 0 ]]
}