caogao

起因

折腾hexo时,看到了其内置主题(landscape)的Gruntfile.js:

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
module.exports = function(grunt){
grunt.initConfig({
gitclone: {
fontawesome: {
options: {
repository: 'https://github.com/FortAwesome/Font-Awesome.git',
directory: 'tmp/fontawesome'
},
},
fancybox: {
options: {
repository: 'https://github.com/fancyapps/fancyBox.git',
directory: 'tmp/fancybox'
}
}
},
copy: {
fontawesome: {
expand: true,
cwd: 'tmp/fontawesome/fonts/',
src: ['**'],
dest: 'source/css/fonts/'
},
fancybox: {
expand: true,
cwd: 'tmp/fancybox/source/',
src: ['**'],
dest: 'source/fancybox/'
}
},
_clean: {
tmp: ['tmp'],
fontawesome: ['source/css/fonts'],
fancybox: ['source/fancybox']
}
});

require('load-grunt-tasks')(grunt);

grunt.renameTask('clean', '_clean');

grunt.registerTask('fontawesome', ['gitclone:fontawesome', 'copy:fontawesome', '_clean:tmp']);
grunt.registerTask('fancybox', ['gitclone:fancybox', 'copy:fancybox', '_clean:tmp']);
grunt.registerTask('default', ['gitclone', 'copy', '_clean:tmp']);
grunt.registerTask('clean', ['_clean']);
};


发现

在上面的Gruntfile.js文件中,有三个容易被忽视的方法(思路):

临时存储区

作者使用一个tmp目录来临时存放gitclone下来的文件,取出自己需要的部分fontawesome/fonts/fancybox/source/,然后删掉temp。

自动加载依赖

当你的Gruntfile.js里面只有少数的任务时,是否使用load-grunt-tasks无关紧要;当你有非常多任务需要load时,你就要像下面这样loadNpmTasks下去:

1
2
3
4
5
6
7
8
//加载插件
grunt.loadNpmTasks('grunt-contrib-uglify');
grunt.loadNpmTasks('grunt-contrib-less');
grunt.loadNpmTasks('grunt-contrib-cssmin');
grunt.loadNpmTasks('grunt-contrib-watch');
...
...
...

其实,你只需要像下面这样,使用插件,让它帮你去load依赖。

1
require('load-grunt-tasks')(grunt);

使用load-grunt-tasks这个插件的作用就很明显了。

子任务

这点一般大家都知道,不过还是提一下:

1
'gitclone:fontawesome'

只执行gitclonefontawesome子任务。