0%

为gulp任务传递参数

现在web前端的脚手架中,有相当一部分数量的人选择用gulp做为首选的构建工具,但是,我们是没办法向gulp的任务直接传递命令行参数的。
我们知道gulp实际上是运行在nodejs中的,那么,我们是可以访问process.argv
比如命令gulp task1 --a 123 --b "my string" --c, 我们看看process.argv会输出什么

1
2
3
4
5
6
7
8
9
10
[
'/usr/bin/nodejs',
'/home/user/.node_modules_global/bin/gulp',
'task1',
'--a',
'123',
'--b',
'my string',
'--c'
]

既然可以拿到命令行输入的东西,那么我们就可以自己写一个参数解析的函数啦!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
// fetch command line arguments
const arg = (argList => {

let arg = {}, a, opt, thisOpt, curOpt;
for (a = 0; a < argList.length; a++) {

thisOpt = argList[a].trim();
opt = thisOpt.replace(/^\-+/, '');

if (opt === thisOpt) {

// argument value
if (curOpt) arg[curOpt] = opt;
curOpt = null;

}
else {

// argument name
curOpt = opt;
arg[curOpt] = true;

}

}

return arg;

})(process.argv);
console.log(arg) //{ a: '123', b: 'my string', c: true }

搞定!

当然,这只是一个简单的实现。
我们还可以使用功能更强大的库, 比如TJ大神的commander

参考
How to Pass Command Line Parameters to Gulp Tasks

Welcome to my other publishing channels