本文紀錄如何透過 gulp 4 順序執行指令,所以篇幅會很短~
目前 gulp 已經更新到 4 了,所以以前我們想要順序執行指令,用的方法已經不能用了,現在 task 他只支援兩個參數,解決辦法是透過 series()這個 API 來做;如果是需要平行處理的,則是使用parallel()
因為官網其實也有範例,基本語法就不在介紹了
這邊要介紹gulp-run-command是可以讓我們在 gulp 裡面去執行 command,一樣性質的套件還有一個叫做gulp-run,但感覺比較難使用,畢竟我的原始需求很簡單,就是順序執行 node.js 的檔案而已。
使用方法
官方的範例還蠻好懂的,直接引用後就可以透過它提供的run
指令執行指令,引用的方式就看你要用 import
還是 require
1 2 3 4 5 6 7 8 9 10 11
| import gulp from "gulp"; import run from "gulp-run-command";
gulp.task("clean", run("rm -rf build")); gulp.task( "build", ["clean"], run("babel index.js --out-file index.es5.js", { env: { NODE_ENV: "production" }, }) );
|
實際範例
這個是我的第一個版本,能夠正確順序執行我要的指令
1 2 3 4 5 6 7 8 9 10 11
| const gulp = require("gulp"); const run = require("gulp-run-command").default;
gulp.task("step1", async () => run("node work01.js")()); gulp.task("step2", async () => run("node work02.js")()); gulp.task("step3", async () => run("node work03.js")()); gulp.task("step4", async () => run("node work04.js")()); gulp.task( "default", gulp.series("step1", "step2", "step3", "step4", (done) => done()) );
|
後來仔細看了一下文件,有提到,run 的第一個參數支援 Array , String , 並且也說明了一系列的命令將會按照順序執,於是直接將指令變成陣列,最終版本如下
1 2 3 4 5 6 7 8 9 10 11
| const gulp = require("gulp"); const run = require("gulp-run-command").default;
const commands = [ "node work01.js", "node work02.js", "node work03.js", "node work04.js", ];
gulp.task("default", async () => run(commands)());
|
後記
會做這件事情其實是因為原本在 CI 上面的作業,有時候會有錯誤的情況,但那些作業內容在 Local 的話又要一個一個自己依照順序執行才能夠檢查,所以用gulp
做了一個 local 也可以執行的檢查指令,其實 gulp 在某些地方還蠻好用的,很適合拿來做一些簡單的小任務