背景

不擅长写bash脚本,所以想用node的gulp来代替bash脚本,所以要建立这么一个workspace收纳各种gulpfile,并且命令应该能够全局调用。

目标

  • 效果为输入gulp-auto minify-blog-image时,达到类似于下面命令的效果
    1
    gulp --gulpfile=minify-blog-image.js

过程

1
2
3
4
mkdir -p ~/automatic && cd ~/automatic #建立workspace放各种gulpfile
npm init #初始化npm的package文件
touch gulpfile.js #node-auto的入口文件
sudo npm install -g gulp #全局安装保证任何地方都能调用到gulp

给gulpfile.js添加一个测试用的task

1
2
3
4
5
var gulp = require("gulp");

gulp.task('default', function(){
console.log('test');
});

测试一下这段是否有用,

1
2
3
4
5
6
gulp #测试
#输出类似于
[14:18:13] Using gulpfile ~/automatic/gulpfile.js
[14:18:13] Starting 'default'...
test
[14:18:13] Finished 'default' after 82 μs

然后测试调用不同gulpfile

1
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
22
var 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
11
gulp-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
2
npm install --save gulp-run #运行命令插件
npm install --save gulp-rename #重命名输出,用来记录实际文件的运行输出

最终测试结果

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
gulp-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去。

常见问题