Как проверить, существует ли скрипт npm? - PullRequest
0 голосов
/ 04 июня 2018

Я создаю сценарий 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 голосов
/ 17 ноября 2018

Правильным решением является использование флага if-present:

npm run test --if-present

0 голосов
/ 04 июня 2018

РЕДАКТИРОВАТЬ: Как уже упоминалось Мари и Джеймсом, если вы хотите только запустить команду, если она существует, npm имеет параметр для этого:

npm run test --if-present

Таким образом, вы можете иметьуниверсальный сценарий, который работает с несколькими проектами (которые могут иметь или не иметь конкретную задачу) без риска получения ошибки.

Источник: https://docs.npmjs.com/cli/run-script

РЕДАКТИРОВАТЬ

Вы можете выполнить grep для проверки слова test:

npm run | grep -q test

это возвращать true, если результат в npm run содержит слово 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 npm run | grep -q test; then
    npm run test
    echo ""
  fi
done < "${ROOT_PATH}/../assets/apps-manifest"

Было бы просто проблемой, если бы там было слово test с другим значением. Надеюсь, это поможет

...