Вот как я традиционно запускал скрипты node / npm в моем файле package.json:

"scripts": {
 "testRun": "node ./runtest.js && node ./runreports.js",

Запуск npm run testRun или yarn testRun запустит сценарий runtest.js, за которым следует сценарий runreport.js, но есть одна загвоздка: && часть этой формулировки на самом деле является логическим логическим И. Это означает, что если первый скрипт возвращает код ошибки, например Exit code (1), то результаты этого скрипта будут оцениваться как false, , и в этом случае логическое И гарантирует, что второй скрипт вообще не запустится.

Итак, я попытался изменить его с логического И на логическое ИЛИ, например:

"scripts": {
 "testRun": "node ./runtest.js || node ./runreports.js",

Теперь мой второй сценарий запускается при ошибке первого, но он только запускается, если это так. Если первый скрипт не возвращает ошибку, то второй сейчас не запускается; не так много улучшений!

Погугливал, кажется, что точка с запятой - это правильный синтаксис для запуска второго скрипта независимо от того, что делает первый, например:

"scripts”": {
 "testRun": "node ./runtest.js; node ./runreports.js",

Большой! Или это так, если вы используете ОС в стиле unix, например Mac OS X или Linux. К сожалению, я использовал Windows из-за того, что совершил ужасные грехи в прошлой жизни. К сожалению, синтаксис с точкой с запятой просто не работает в Windows, потому что это, ну… Windows. (Примечание: я использовал оболочку Git Bash в Windows 7. Я понимаю, что в Windows 10 есть какая-то надлежащая оболочка bash, поэтому, возможно, синтаксис с точкой с запятой там работает.)

Я подумал об этом еще немного, и мне пришло в голову, что, поскольку это проблема булевой логики, должно быть какое-то решение булевой логики. Действительно, было!

Теперь в логической логике something OR true всегда приводит к true, например:

true OR true = true
true OR false = true
false OR true = true

Применяя эту логику к моему сценарию package.json, я придумал следующее:

"scripts": {
 testRun: "(node ./runtest.js || true) && node ./runreports.js",

Если заключить первый вызов сценария в скобки и логическое ИЛИ с true, результат этого раздела в квадратных скобках должен всегда быть true. Теперь мой скрипт runreports.js будет работать независимо от того, что делает скрипт runtest.js.

Дополнительная информация

Https://github.com/npm/npm/issues/4040

(Включает мой комментарий, предлагающий решение выше. Как ни странно, до сих пор никто не признал мою гениальность, но это, конечно, только вопрос времени 😉.)