如何检查npm脚本是否存在?

时间:2018-06-04 15:21:12

标签: bash shell npm npm-run

我正在创建一个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"

2 个答案:

答案 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在那里有另一种意义,那将是一个问题 希望它有所帮助