По моему у package.json
меня есть два скрипта:
"scripts": {
"start-watch": "nodemon run-babel index.js",
"wp-server": "webpack-dev-server",
}
Я должен запускать эти 2 сценария параллельно каждый раз, когда начинаю разработку в Node.js. Первое, о чем я подумал, это добавить третий скрипт:
"dev": "npm run start-watch && npm run wp-server"
... но это будет ждать start-watch
до конца, прежде чем бежать wp-server
.
Как я могу запустить их параллельно? Пожалуйста, имейте в виду, что мне нужно увидеть output
эти команды. Кроме того, если ваше решение включает в себя инструмент для сборки, я бы предпочел использовать его, gulp
а не grunt
потому, что я уже использую его в другом проекте.
javascript
node.js
build
Андре Пена
источник
источник
&&
будет запускать ваши скрипты последовательно, в то время как&
будет запускать их параллельно .npm run start-watch & npm run wp-server
. Это запустит первую команду как фоновый поток. Это работает очень хорошо, когда одна из команд не выполняется долго и не требует ручного выхода позже. Нечто подобноеconcurrently
позволяет вам убить все потоки одновременно с помощью CTRL-C.Ответы:
Используйте пакет, который вызывается одновременно .
npm i concurrently --save-dev
Затем настройте вашу
npm run dev
задачу так:источник
node ./node_modules/concurrently/src/main.js
не нуженconcurrent
будет работать нормально в сценариях , так как модуль устанавливает бункер для./node_modules/.bin/concurrent
concurrently
использует несколько потоков, которые связываются с выводом на консоль (цвета могут выглядеть странно, курсор исчезает), тогдаparallelshell
как такой проблемы нет .--raw
режим, чтобы сохранить цвета на выходе.Если вы используете UNIX-подобную среду, просто используйте
&
в качестве разделителя:В противном случае, если вы заинтересованы в кроссплатформенном решении, вы можете использовать модуль npm-run-all :
источник
a && b
запускаетсяb
послеa
успешного завершения, но nodemon никогда не останавливается без ошибок, так что это не может работать.a & b
начинаетсяa
, перемещает его на задний план и начинаетb
сразу же. Выиграть!a | b
Трубы, выход которыхa
к стандартуb
требует одновременной работы обоих. Хотя это может показаться желаемым эффектом, вы не должны использовать его здесь.&
- действительно плохая идея, поскольку она отрывает процесс. Это означает, чтоnpm
больше не будет родительским процессом. Вы получите зомбиnpm run start-watch
, которого не убьютctrl-c
.wait
чтобы смягчить проблему с зависающими процессами:"dev": "npm run start-watch & npm run wp-server & wait"
&
в Unix предотвращает реакцию команды на Cc / Cz, а также предотвращает распространение ее кода возврата в случае сбоя.Из Windows CMD вы можете использовать
start
:Каждая команда, запускаемая таким образом, запускается в собственном окне.
источник
&&
ждет завершения первой команды перед началом второй команды, и задача наблюдателя никогда не завершится.Вы должны использовать npm-run-all (или
concurrently
,parallelshell
), потому что он имеет больший контроль над командами запуска и уничтожения. Операторы&
,|
плохие идеи , потому что вам нужно вручную остановить его после того, как все тесты закончены.Это пример тестирования транспортира через npm:
-p
= Выполнять команды параллельно.-r
= Убить все команды, когда одна из них завершится с нулевым кодом выхода.Запуск
npm run test
запустит драйвер Selenium, запустит http-сервер (для обслуживания ваших файлов) и запустит тесты транспортира. После завершения всех тестов он закроет http-сервер и драйвер селена.источник
gulp
иgulp-sync
?Вы можете использовать один
&
для параллельного запуска скриптаСсылка ссылка
источник
Лучшее решение - использовать
&
источник
&
работает на Windows, но работает по-другому. В OSX он запускает обе команды одновременно, но в Windows он запускает первую команду, а после существования первой команды запускает вторую команду.Я проверил почти все решения сверху и только с помощью npm-run-all я смог решить все проблемы. Основным преимуществом перед всеми другими решениями является возможность запуска скрипта с аргументами .
Это позволяет мне запускать команду с такими аргументами, как
npm run test:watch -- Something
.РЕДАКТИРОВАТЬ:
Есть еще одна полезная опция для
npm-run-all
:Добавьте
-r
в свойnpm-run-all
скрипт, чтобы убить все процессы, когда один закончил с кодом0
. Это особенно полезно, когда вы запускаете HTTP-сервер и другой скрипт, который использует сервер.источник
У меня есть кроссплатформенное решение без каких-либо дополнительных модулей . Я искал что-то вроде блока try catch, который мог бы использовать как в cmd.exe, так и в bash.
Решение,
command1 || command2
которое, кажется, работает в обеих средах одинаково. Таким образом, решение для ОП:Тогда простые
npm start
(аnpm run dev
) будут работать на всех платформах!источник
Если вы замените двойной амперсанд одним амперсандом, сценарии будут выполняться одновременно.
источник
Быстрое решение
В этом случае я бы сказал, что лучше всего.Если этот сценарий предназначен для частного модуля, предназначенного для запуска только на компьютерах с * nix , вы можете использовать оператор управления для разветвления процессов, который выглядит следующим образом:&
Пример этого в частичном файле package.json:
Затем вы выполняете их одновременно через
npm run serve-bundle
. Вы можете улучшить сценарии для вывода pids разветвленного процесса в файл следующим образом:Google что-то вроде оператора управления bash за разветвление, чтобы узнать больше о том, как это работает. Я также предоставил некоторые дополнительные сведения об использовании технологий Unix в проектах Node ниже:
Дополнительный контекст RE: Unix Tools & Node.js
Если вы не используете Windows, инструменты / методики Unix часто хорошо работают для достижения чего-либо с помощью сценариев Node, потому что:
Модули для системных задач в Nodeland также часто являются абстракциями или приближениями инструментов Unix, от
fs
доstreams
.источник
&
оператор не поддерживается в Windows.редактировать:
Вам необходимо предварительно установить npm-run-all . Также проверьте эту страницу для других сценариев использования.
источник
Как насчет разветвления
Другой вариант запуска нескольких сценариев Node - с одним сценарием Node, который может разветвлять многие другие. Форкинг изначально поддерживается в Node, поэтому он не добавляет никаких зависимостей и является кроссплатформенным.
Минимальный пример
Это просто запустит сценарии как есть и предположит, что они находятся в каталоге родительского сценария.
Подробный пример
Это будет запускать сценарии с аргументами и настраиваться многими доступными параметрами.
Общение с помощью разветвленных скриптов
Forking также имеет дополнительное преимущество, заключающееся в том, что родительский скрипт может получать события от разветвленных дочерних процессов, а также отправлять их обратно. Типичным примером является родительский скрипт для уничтожения его разветвленных потомков.
Для более доступных событий и методов см.
ChildProcess
Документациюисточник
Я столкнулся с проблемами с
&
и|
, которые выходят из состояний и выдачи ошибок, соответственно.Другие решения хотят запускать любую задачу с заданным именем, например, npm-run-all, что не было моим вариантом использования.
Поэтому я создал npm-run -rallel, который запускает сценарии npm асинхронно и сообщает о завершении работы.
Итак, для ваших сценариев это будет:
npm-run-parallel wp-server start-watch
источник
В моем случае у меня есть два проекта, один из которых был UI, а другой - API , и оба имеют свой собственный скрипт в своих соответствующих
package.json
файлах.Итак, вот что я сделал.
источник
node app
) и API (Angular в подпапке src , думаю, этоcd src/ng serve
), работает только первая часть. Напримерnode app& cd src& ng serve
.package.json:
Дополнительная информация: https://github.com/mysticatea/npm-run-all/blob/master/docs/npm-run-all.md.
источник
Я использовал npm-run-all в течение некоторого времени, но я никогда не ладил с ним, потому что вывод команды в режиме просмотра не очень хорошо работает вместе. Например, если я начну
create-react-app
иjest
в режиме просмотра, я смогу увидеть вывод только из последней выполненной команды. Поэтому большую часть времени я выполнял все свои команды вручную ...Вот почему я реализую свой собственный lib, run-screen . Это еще очень молодой проект (со вчерашнего дня: p), но, возможно, стоит взглянуть на него, в вашем случае это будет:
Затем вы нажимаете цифровую клавишу,
1
чтобы увидеть результат,wp-server
и нажмите,0
чтобы увидеть результатstart-watch
.источник
Мое решение похоже на Piittis, хотя у меня были некоторые проблемы с использованием Windows. Поэтому я должен был проверить для win32.
источник
Простой нод-скрипт, который поможет вам без особых хлопот. Использование readline для объединения выходных данных, чтобы линии не были искажены.
источник
эта работа в windows
источник