Скажем, у меня есть
"scripts": {
"pre-build": "echo \"Welcome\" && exit 1",
"build_logic": "start cmd.exe @cmd /k \"yo esri-appbuilder-js:widget && exit 1\"",
"post_build": "start C:\\WebAppBuilderForArcGIS\\startupShortcut",
"exit" : "start cmd.exe @cmd /k \"echo \"goodbye\" && exit 1\""
},
Какую команду NPM я могу запустить, чтобы все эти скрипты запускались последовательно. Когда я использую исправление до / после, они запускаются последовательно, но не дожидаются завершения родительского скрипта перед выполнением. Я предполагаю, что единственное решение: как заставить задачи Gulp запускаться последовательно при запуске команд оболочки в вспомогательной функции async.series? ? Я знаю, что это можно сделать с помощью Gulp, но пока я хотел бы остановиться на NPM, чтобы изучить его возможности. Спасибо за любую помощь!
javascript
node.js
npm
cmd
Рис
источник
источник
Start
команды, у вас должна быть возможность использовать/wait
параметр (Запустить приложение и дождаться его завершения)Ответы:
Вызовите эти скрипты через npm run и соедините их двойным амперсандом
&&
:Пояснение:
&&
(двойной амперсанд) для последовательного выполнения.&
(одиночный амперсанд) для параллельного выполнения.источник
&&
оцениваются оболочкой и не работают в Windows.&&
синтаксис является конструкцией UNIX. Он будет вести себя некорректно на компьютерах Windows, что может привести к серьезным последствиям для процесса сборки.npm-run-all
документации: «мы иногда используем&
для параллельного выполнения нескольких команд, но Windowscmd.exe
... не поддерживает [этот оператор]». Похоже, вы были правы - по крайней мере, из моего краткого исследования&&
оператор кажется полностью совместимым с разными платформами.Следуя отличному ответу @ Mobiletainment , вы также можете использовать npm-run-all, чтобы сделать команду намного короче и более читаемой. В твоем случае:
"scripts": { ... "build": "run-s pre-build build_logic post_build exit" }
run-s
- это ярлыкnpm-run-all
, который последовательно запускает все заданные npm-скрипты, поэтому-s
(run-s
является более короткой версиейnpm-run-all -s
).источник
Вы можете префикс скриптов
pre
иpost
поэтому они будут выполняться автоматически:"scripts": { "prebuild": "echo \"Welcome\" && exit 1", "build": "start cmd.exe @cmd /k \"yo esri-appbuilder-js:widget && exit 1\"", "postbuild": "start C:\\WebAppBuilderForArcGIS\\startupShortcut", "exit" : "start cmd.exe @cmd /k \"echo \"goodbye\" && exit 1\"" }
затем беги
npm run build
источник
Вы можете просто вставить их в другой сценарий.
"start": "pre-build && build_logic && post_build && exit"
источник
start
Команда , которую вы выполняете в окнах технически является законченной. Используйте/wait
флаг с,start
чтобы заставитьstart
приложение оставаться открытым до завершения внутреннего метода.start notepad
из командной строки, а затем посмотрите на исходную командную строку. Вы должны иметь возможность ввести другую команду. Тогда бегиstart /wait notepad
. Командаstart
должна продолжать «работать», пока открыто окно блокнота (еще раз взгляните на командную строку). Затем, как только вы закроете блокнот,start
все будет готово.можешь попробовать:
"scripts": { "clean-dist": "rm -f ./dist/*.js && rm -f ./dist/*.map", "build": "npm run clean-dist && parcel build ./packages/index.html" },
источник
Вы можете использовать npm-run-all для объединения нескольких команд множеством разных способов.
Например, если у вас были следующие скрипты в вашем
package.json
:"scripts": { "clean": "rimraf dist", "lint": "eslint src", "build": "babel src -o lib" }
Вы можете запустить их все последовательно следующим образом:
См. Этот вопрос о том, как запускать несколько команд npm параллельно
источник