我正在创建一个bash脚本,该脚本遍历我的每个项目,如果存在npm run test
脚本,则运行test
。
我知道如果我进入一个项目并运行npm run
,它将为我提供可用脚本列表,如下所示:
Lifecycle scripts included in www:
start
node server.js
test
mocha --require @babel/register --require dotenv/config --watch-extensions js **/*.test.js
available via `npm run-script`:
dev
node -r dotenv/config server.js
dev:watch
nodemon -r dotenv/config server.js
build
next build
但是,我不知道如何获取该信息,看看test
是否可用,然后运行它。
这是我目前的代码:
#!/bin/bash
ROOT_PATH="$(cd "$(dirname "$0")" && pwd)"
BASE_PATH="${ROOT_PATH}/../.."
while read MYAPP; do # reads from a list of projects
PROJECT="${MYAPP}"
FOLDER="${BASE_PATH}/${PROJECT}"
cd "$FOLDER"
if [ check here if the command exists ]; then
npm run test
echo ""
fi
done < "${ROOT_PATH}/../assets/apps-manifest"
答案 0 :(得分:4)
正确的解决方案是使用if-present标志:
npm run test --if-present
答案 1 :(得分:1)
修改强> 正如玛丽和詹姆斯所提到的,如果你只想运行命令,npm有一个选项:
npm run test --if-present
通过这种方式,您可以拥有一个通用脚本,该脚本可以处理多个项目(可能有也可能没有特定任务),而不会有接收错误的风险。
来源:https://docs.npmjs.com/cli/run-script
修改强>
你可以用grep检查单词test:
npm run | grep -q test
如果npm run中的结果包含单词test
,则返回true在你的脚本中它看起来像这样:
#!/bin/bash
ROOT_PATH="$(cd "$(dirname "$0")" && pwd)"
BASE_PATH="${ROOT_PATH}/../.."
while read MYAPP; do # reads from a list of projects
PROJECT="${MYAPP}"
FOLDER="${BASE_PATH}/${PROJECT}"
cd "$FOLDER"
if npm run | grep -q test; then
npm run test
echo ""
fi
done < "${ROOT_PATH}/../assets/apps-manifest"
如果单词test在那里有另一种意义,那将是一个问题 希望它有所帮助