Как условно запустить скрипт npm

Я ищу кроссплатформенный способ условного выполнения шага в моем сценарии сборки.

У меня есть этап сборки, который является дорогостоящим, однако проверка его необходимости выполняется относительно быстро. Я создал скрипт, который возвращает ненулевой код ошибки, если нет необходимости выполнять шаг сборки. Как я могу написать свой скрипт npm, чтобы запускать сборку только в том случае, если проверка прошла успешно, но выдавать ошибки, если шаг сборки завершается неудачей?

Пример package.json:

"scripts": {
    "schema:build": "npm run schema:rebuild-check && npm run schema:force-build",
    "schema:rebuild-check": "node tools/schema is-rebuild-necessary",
    "schema:force-build": "npm run schema:validate && npm run schema:generate-index && npm run schema:bundle"
}

Проблема с вышеизложенным заключается в том, что если перестроение не требуется, вся моя сборка выйдет из строя. Я не могу просто проглотить код выхода с чем-то вроде exitzero, потому что я хочу знать, не сработает ли какая-либо из команд в сценарии schema:force-build.

Это терпит неудачу на окнах. Из того, что я прочитал в Интернете, это должно работать: «схема: сборка»: «схема запуска npm: перестроить-проверить && схема запуска npm: принудительно-сборка || эхо \"Пропуск сборки схемы\"" Поскольку || или оператор должен запустить вторую команду, если первая не удалась. Однако на моей машине с Windows ошибка возникает при первом утверждении.

Jack Allan 29.05.2019 10:49
Настройка шаблона Metronic с помощью Webpack и Gulp
Настройка шаблона Metronic с помощью Webpack и Gulp
Я пишу эту статью, чтобы поделиться тем, как настроить макет Metronic с помощью Sass, поскольку Metronic предоставляет так много документации, и они...
0
1
614
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Проблема возникает из двух вещей:

1) Если скрипт npm завершается с ненулевым кодом, npm всегда будет жаловаться

2) Необходимо указать «иначе», которое возвращает ненулевое значение, используя || оператор

Рабочее решение:

"schema:build": "node tools/schema is-rebuild-necessary && npm run schema:force-build || echo Skipping schema build",
"schema:force-build": "npm run schema:validate && npm run schema:generate-index && npm run schema:bundle"

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