Я ищу кроссплатформенный способ условного выполнения шага в моем сценарии сборки.
У меня есть этап сборки, который является дорогостоящим, однако проверка его необходимости выполняется относительно быстро. Я создал скрипт, который возвращает ненулевой код ошибки, если нет необходимости выполнять шаг сборки. Как я могу написать свой скрипт 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.
Проблема возникает из двух вещей:
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"
Это терпит неудачу на окнах. Из того, что я прочитал в Интернете, это должно работать: «схема: сборка»: «схема запуска npm: перестроить-проверить && схема запуска npm: принудительно-сборка || эхо \"Пропуск сборки схемы\"" Поскольку || или оператор должен запустить вторую команду, если первая не удалась. Однако на моей машине с Windows ошибка возникает при первом утверждении.