簡體   English   中英

依次運行NPM個腳本

[英]Running NPM scripts sequentially

假設我有

"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 命令來讓所有這些腳本按順序啟動。 當我使用前/后修復時,它們會按順序啟動,但不會在執行前等待父腳本完成。 我假設唯一的解決方案是:如何在 async.series 幫助程序 function 中觸發 shell 命令時按順序觸發 Gulp 任務? 我知道這可以用 Gulp 來完成,但我想暫時堅持使用 NPM 來探索它的功能。 謝謝你的幫助!

通過調用運行NPM與雙符號鏈他們這些腳本&&

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

說明:

  • 使用&& (雙與號)進行順序執行。
  • 使用& (單& )進行並行執行。

遵循@Mobiletainment 的精彩回答,您還可以使用npm-run-all使命令更短且更具可讀性。 在你的情況下:

"scripts": {
    ...
    "build": "run-s pre-build build_logic post_build exit"
}

run-snpm-run-all提供的快捷方式,它按順序運行所有給定的 npm-scripts,因此-srun-snpm-run-all -s的較短版本)。

您可以在腳本prepost前綴,以便它們自動執行:

"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"

您可以使用npm-run-all以多種不同方式組合多個命令

例如,如果您的package.json有以下腳本:

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

您可以像這樣按順序運行它們:

$ npm-run-all clean lint build

請參閱此問題以了解如何並行運行多個 npm 命令

你可以試試:


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

有幾個選項比公認的答案更好:

  • && - 按順序運行命令,只要每個命令都成功: command && command && command ; 大多數shell 都支持(Powershell 的早期版本不支持)(感謝@Mobiletainment)
  • ; - 按順序運行命令,忽略成功/失敗; 大多數(如果不是全部)shell 都支持
  • npm-run-all package - 可以按順序或並行運行多個命令; 請參閱使用文檔(感謝@Or A.)
  • concurrently package - 並行運行多個命令(包含在內是因為這是一個流行的谷歌結果); 請參閱文檔以了解使用情況

順序和並行混合示例

如果您需要混合,我將執行以下操作以確保 command_1 首先運行並完成,而 command_2a 和 command_2b 可以並行運行。

    "dev": "yarn command_1 && (yarn command_2a & yarn command_2b)"

實際例子:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM