现在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
| 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