npm выполнение нескольких команд && не работает, но & и || делает - PullRequest
1 голос
/ 09 июля 2020

Я пытался запустить несколько npm команд, чтобы последовательно запустить некоторые из моих тестов cypress. после некоторых исследований я обнаружил, что я использовал && между npm командами.

package. json файл, внутри скриптов я определил тест как

"scripts":{
"test":"npm run cypresscommand_1 && npm run cypresscommand_2"
}

Когда я выполняю это с использованием npm run test по какой-то причине, npm run cypresscommand_1 было выполнено, но npm run cypresscommand_2 не было выполнено. При дальнейших исследованиях и просмотре некоторых руководств, позже я попробовал две модификации

модификация 1: insted of && Я использовал &

"scripts":{
"test":"npm run cypresscommand_1 & npm run cypresscommand_2"
}

модификация 2: insted of && Я использовал ||

"scripts":{
"test":"npm run cypresscommand_1 || npm run cypresscommand_2"
}

на удивление оба дали мне ожидаемые результаты, которые означают, что оба выполнены npm запустить cypresscommand_1 , а затем npm запустить cypresscommand_2

Что я хочу знать:

  1. В новых версиях npm заменяли ли они && на & и ||
  2. Равно ли & равно и
  3. Это значение || равно и
  4. Есть ли разница между & и ||

Хотя код работает отлично, я хочу убедиться, использую ли я правильный синтаксис или нет . Может кто поможет?

Спасибо.

1 Ответ

4 голосов
/ 09 июля 2020

Это не имеет ничего общего с npm, они интерпретируются как bash команды в системах на базе Linux,

& - означает, что оно будет выполняться как фоновое задание,

&& - код выхода из каждой команды и использование его в качестве операнда в связанной операции &&.

| - это оператор конвейера, в котором вывод одной команды передается следующей команде,

|| - логический оператор ИЛИ и заставьте Bash продолжить обработку связанных команд, если завершится только одна из пары.

В вашем случае вы можете попробовать использовать точку с запятой ';' который запускает команды одну за другой, даже если это не удается.

"scripts":{ "test":"npm run cypresscommand_1 ; npm run cypresscommand_2" }

...