gulp-順序執行指令

本文紀錄如何透過 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"; // or `var run = require('gulp-run-command').default` for ES5

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 在某些地方還蠻好用的,很適合拿來做一些簡單的小任務