背景
不擅长写bash脚本,所以想用node的gulp来代替bash脚本,所以要建立这么一个workspace收纳各种gulpfile,并且命令应该能够全局调用。
目标
- 效果为输入gulp-auto minify-blog-image时,达到类似于下面命令的效果
1
gulp --gulpfile=minify-blog-image.js
过程
1 | mkdir -p ~/automatic && cd ~/automatic #建立workspace放各种gulpfile |
给gulpfile.js添加一个测试用的task1
2
3
4
5var gulp = require("gulp");
gulp.task('default', function(){
console.log('test');
});
测试一下这段是否有用,1
2
3
4
5
6gulp #测试
输出类似于
[14:18:13] Using gulpfile ~/automatic/gulpfile.js
[14:18:13] Starting 'default'...
test
[14:18:13] Finished 'default' after 82 μs
然后测试调用不同gulpfile1
cat gulpfile.js >> test.js #把测试任务移到test.js里面
把gulpfile.js替换成1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22var gulp = require("gulp");
gulp.task('default', function(){
var args = [],tasks = [];
//跳过用alias而自带的前面4个参数
for(var x = 4; x < process.argv.length; x++){
var v = process.argv[x];
if(v == '-task'){
v = process.argv[++x];
if(v){
tasks = v.split(',');
}
} else {
args.push(v);
}
}
if(tasks.length > 0){
console.log(tasks, args.join(' '));
} else {
console.error('Please specify a task to run!');
}
});
使用alias来生成gulp-auto命令,顺便加入到bash_aliases里面,以后登录就能用1
alias gulp-auto='gulp --glupfile ~/automatic/gulpfile.js -task ' #最后面的空格不能少
测试一下1
2
3
4
5
6
7
8
9
10
11gulp-auto
[15:05:04] Using gulpfile ~/automatic/gulpfile.js
[15:05:04] Starting 'default'...
Please specify a task to run!
[15:05:04] Finished 'default' after 105 μs
gulp-auto test -args arg
[15:05:53] Using gulpfile ~/automatic/gulpfile.js
[15:05:53] Starting 'default'...
[ 'test' ] '-args arg'
[15:05:53] Finished 'default' after 1.54 ms
已经得到了想要的效果,所以只要把之前的log改成用exec去执行一下命令即可。
1 | npm install --save gulp-run #运行命令插件 |
最终测试结果1
2
3
4
5
6
7
8
9
10
11
12
13
14
15gulp-auto test
[08:32:24] Using gulpfile ~/automatic/gulpfile.js
[08:32:24] Starting 'default'...
[08:32:24] Finished 'default' after 39 ms
gulp --gulpfile ~/automatic/test.js
[08:32:24] Using gulpfile ~/automatic/test.js
[08:32:24] Starting 'default'...
running test
[08:32:24] Finished 'default' after 82 μs
cat logs/20161028/test.log
[08:32:24] Using gulpfile ~/automatic/test.js
[08:32:24] Starting 'default'...
running test
[08:32:24] Finished 'default' after 82 μs
符合预期,完成目标。发布一下代码到OSChina去。