现在web前端的脚手架中,有相当一部分数量的人选择用gulp做为首选的构建工具,但是,我们是没办法向gulp的任务直接传递命令行参数的。
我们知道gulp实际上是运行在nodejs中的,那么,我们是可以访问process.argv
比如命令gulp task1 --a 123 --b "my string" --c, 我们看看process.argv会输出什么
| 12
 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'
 ]
 
 | 
既然可以拿到命令行输入的东西,那么我们就可以自己写一个参数解析的函数啦!
| 12
 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
 
 | 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) {
 
 
 if (curOpt) arg[curOpt] = opt;
 curOpt = null;
 
 }
 else {
 
 
 curOpt = opt;
 arg[curOpt] = true;
 
 }
 
 }
 
 return arg;
 
 })(process.argv);
 console.log(arg)
 
 | 
搞定!
当然,这只是一个简单的实现。
我们还可以使用功能更强大的库, 比如TJ大神的commander
参考
How to Pass Command Line Parameters to Gulp Tasks