Допустим, у меня

"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, чтобы изучить его возможности. Спасибо за любую помощь!

Rice

Ответов: 7

Ответы (7)

Вызвать эти сценарии с помощью npm run и связать их двойным амперсандом &&:

npm run pre-build && npm run build_logic && npm run post_build && npm run exit

Пояснение:

  • Используйте && (двойной амперсанд) для последовательного выполнения.
  • Используйте & (одиночный амперсанд) для параллельного выполнения.

Вы можете использовать npm-run-all для объединения нескольких команд множеством разных способов

Например, если в вашем package.json были следующие скрипты:

"scripts": {
    "clean": "rimraf dist",
    "lint":  "eslint src",
    "build": "babel src -o lib"
}

Вы можете запустить их все последовательно следующим образом:

$ npm-run-all чистая сборка lint

См. Этот вопрос для как запускать несколько команд npm параллельно

Вы можете просто вставить их в другой скрипт."start": "pre-build && build_logic && post_build && exit"

Следуя замечательному ответуот @ 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

Пример последовательного и параллельного микширования

Если вам нужно сочетание, вот что я сделал для обеспечения того, чтобы command_1 запускалась и завершалась первой, а command_2a и command_2b могли выполняться параллельно.

 "dev": "команда пряжи_1 && (команда пряжи_2a & команда пряжи_2b)"

Практический пример:

 "dev": "yarn buildPackage && (yarn watchPackageSource & yarn watchExamplePage)"

можно попробовать:


"scripts": {
  "clean-dist": "rm -f ./dist/*.js && rm -f ./dist/*.map",
  "build": "npm run clean-dist && parcel build ./packages/index.html"
},

2022 WebDevInsider