Как проверить, существует ли скрипт npm?

Я создаю сценарий 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"
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
18
0
7 383
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Обновлено: Как упоминалось Мари и Джеймсом, если вы хотите запустить команду только в том случае, если она существует, у npm есть опция для этого:

npm run test --if-present

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

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

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

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

npm run | grep -q test

это вернет истину, если результат в 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"

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

К вашему сведению: ответ ниже (для использования npm run test --if-present) - лучшее решение

Marie Hoeger 28.03.2019 19:12

Я добавлю ваше предложение @MarieHoeger, что касается настоящего случая пользователя, это действительно лучшее решение, я все равно оставлю свое другое решение, потому что для точного описания вопроса (как проверить, существует ли сценарий npm?) Мое решение можно использовать в большем количестве случаев и может помочь другим пользователям.

Denis 08.04.2019 22:09

Отлично, спасибо, @Denis! Я думаю, что моя формулировка была более резкой, чем я предполагал. Извинения!

Marie Hoeger 08.04.2019 22:17

Это только у меня или решение --if-present ... неверно? Отсутствие определения «тестового» сценария и последующий запуск npm test, npm run test, npm run-script test и т. д. Как с флагом --is-present, так и без него дает одинаковый результат: > echo 'Error: no test specified'Error: no test specified

Dan Haddigan 11.02.2020 18:33

Я проверил и получил то же поведение здесь ... но похоже, что это характерно для команды "test", для любой другой команды это работает. Я думаю, что есть какой-то тестовый сценарий по умолчанию, если вы его не определяете, поэтому он всегда присутствует (по крайней мере, для --if-present), но я не мог ничего в документации, подтверждающей это

Denis 13.02.2020 00:47

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

npm run test --if-present

Почему это правильное решение? Что делает --if-present? Пожалуйста, расширите этот ответ.

Goodbye StackExchange 17.11.2018 02:07

Флаг --if-present будет запускать указанный сценарий, только если он определен.

James 21.11.2018 00:37

Так что поясните это в своем ответе. Расширьте его, сделайте действительно отличный ответ.

Goodbye StackExchange 21.11.2018 03:19

Спасибо, @James !! Этот ответ меня спас :) Вот ссылка на документы npm: docs.npmjs.com/cli/run-script

Marie Hoeger 28.03.2019 19:11

Я бы хотел, чтобы это было применимо и к пряже

JacopKane 28.12.2019 00:53

Если вам нужно запустить сценарий, если он существует, ИНАЧЕ, сделайте что-нибудь еще, это не обязательно «правильное решение».

JHH 17.06.2021 16:48

Другие вопросы по теме