本文主要讲通配符和模板的基本使用方法。
一 通配符
通常分别指定所有源文件路径是不切实际的,因此Grunt通过内置支持node-glob 和 minimatch 库来匹配文件名(又叫作globbing
)。
然这并不是一个综合的匹配模式方面的教程,你只需要知道如何在文件路径匹配过程中使用它们即可:
*
匹配任意数量的字符,但不匹配/
?
匹配单个字符,但不匹配/
**
匹配任意数量的字符,包括/
,只要它是路径中唯一的一部分{}
允许使用一个逗号分割的“或”表达式列表!
在模式的开头用于排除一个匹配模式所匹配的任何文件
每个人都需要知道的是:foo/*.js
将匹配位于foo/
目录下的所有的.js
结尾的文件;而foo/**/*js
将匹配foo/
目录以及其子目录中所有以.js
结尾的文件。
此外, 为了简化原本复杂的通配符模式,Grunt允许指定一个数组形式的文件路径或者一个通配符模式。所有模式按顺序处理,模式处理的过程中,带有!
前缀的模式所匹配的文件将不包含在结果集中。 而且其结果集中的每一项也是唯一的。
1 // 指定单个文件: 2 {src: 'foo/this.js', dest: ...} 3 // 指定一个文件数组: 4 {src: ['foo/this.js', 'foo/that.js', 'foo/the-other.js'], dest: ...} 5 // 使用一个匹配模式: 6 {src: 'foo/th*.js', dest: ...} 7 8 // 一个独立的node-glob模式: 9 {src: 'foo/{a,b}*.js', dest: ...} 10 // 也可以这样编写: 11 {src: ['foo/a*.js', 'foo/b*.js'], dest: ...} 12 13 // foo目录中所有的.js文件,按字母顺序排序: 14 {src: ['foo/*.js'], dest: ...} 15 // 首先是bar.js,接着是剩下的.js文件,并按字母顺序排序: 16 {src: ['foo/bar.js', 'foo/*.js'], dest: ...} 17 18 // 除bar.js之外的所有的.js文件,按字母顺序排序: 19 {src: ['foo/*.js', '!foo/bar.js'], dest: ...} 20 // 按字母顺序排序的所有.js文件,但是bar.js在最后。 21 {src: ['foo/*.js', '!foo/bar.js', 'foo/bar.js'], dest: ...} 22 23 // 模板也可以用于文件路径或者匹配模式中: 24 {src: ['src/<%= basename %>.js'], dest: 'build/<%= basename %>.min.js'} 25 // 它们也可以引用在配置中定义的其他文件列表: 26 {src: ['foo/*.js', '<%= jshint.all.src %>'], dest: ...}
二 模板
使用<% %>
分隔符指定的模板会在任务从它们的配置中读取相应的数据时将自动扩展扫描。模板会被递归的展开,直到配置中不再存在遗留的模板相关的信息(与模板匹配的)。
整个配置对象决定了属性上下文(模板中的属性)。此外,在模板中使用grunt
以及它的方法都是有效的,例如: <%= grunt.template.today('yyyy-mm-dd') %>
。
<%= prop.subprop %>
将会自动展开配置信息中的prop.subprop
的值,不管是什么类型。像这样的模板不仅可以用来引用字符串值,还可以引用数组或者其他对象类型的值。<% %>
执行任意内联的JavaScript代码。对于控制流或者循环来说是非常有用的。
下面以concat
任务配置为例,运行grunt concat:sample
时将通过banner中的/* abcde */
连同foo/*.js
+bar/*.js
+bar/*.js
匹配的所有文件来生成一个名为build/abcde.js
的文件。
1 grunt.initConfig({ 2 concat: { 3 sample: { 4 options: { 5 banner: '/* <%= baz %> */ ', // '/* abcde */ ' 6 }, 7 src: ['<%= qux %>', 'baz/*.js'], // [['foo/*.js', 'bar/*.js'], 'baz/*.js'] 8 dest: 'build/<%= baz %>.js', // 'build/abcde.js' 9 }, 10 }, 11 //用于任务配置模板的任意属性 12 foo: 'c', 13 bar: 'b<%= foo %>d', // 'bcd' 14 baz: 'a<%= bar %>e', // 'abcde' 15 qux: ['foo/*.js', 'bar/*.js'], 16 });
参考资料&内容来源:
Grunt官网:https://www.gruntjs.net/configuring-tasks