grunt 配置任务
您可以在Gruntfile.js文件中为Grunt定义项目特定的配置数据。
Grunt配置
可以使用grunt.initConfig()方法在Gruntfile中初始化任务配置数据。在grunt.initConfig()函数中,从package.json文件获取配置信息。该配置将包含名为属性的任务和任何任意数据。
grunt.initConfig({ jshint: { // configuration for jshint task }, cssmin: { // configuration for cssmin task }, // Arbitrary non-task-specific properties my_files: ['dir1/*.js', 'dir2/*.js'], });
任务配置和目标
当你运行一个任务时,Grunt会在任务命名的属性下寻找配置。我们将定义具有多种配置和目标选项的任务,如下所示 -
grunt.initConfig({ jshint: { myfile1: { // configuration for "myfile1" target options }, myfile2: { // configuration for "myfile2" target options }, }, cssmin: { myfile3: { // configuration for "myfile3" target options }, }, });
这里,jshint任务具有myfile1和myfile2目标,而cssmin任务具有myfile3目标。当您运行grunt jshint时,它将遍历任务和目标以处理指定的目标配置。
选项
定义覆盖任务默认值的任务配置内的选项属性。每个目标都包含覆盖任务级别选项的选项属性。它将具有以下格式
grunt.initConfig({ jshint: { options: { // task-level options that overrides task defaults }, myfile: { options: { // "myfile" target options overrides task defaults }, }, myfile1: { // there is no option, target will use task-level options }, }, });
文件
Grunt提供了一些用于指定任务应该在哪些文件上运行的想法,并使用不同的方式来指定src-dest文件映射。以下是src和dest映射所支持的一些附加属性
- filter − 它是一个函数,用于指定匹配的src文件路径并返回true或false值。
- nonull − 它在设置为true时定义不匹配的模式。
- dot − 它匹配以句号或其他开头的文件名。
- matchBase − 它将包含斜杠的模式与路径的基本名称相匹配。
- expand − 它处理src-dest文件映射。
紧凑格式
它指定每个目标的src-dest文件映射,可用于只读任务,并且只需要src属性并且不需要dest属性。
grunt.initConfig({ jshint: { myfile1: { src: ['src/file1.js','src/file2.js'] }, }, cssmin: { myfile2: { src: ['src/file3.js','src/file4.js'], dest: 'dest/destfile.js', }, }, });
文件对象格式
它指定每个目标的src-dest文件映射,其中属性名称是dest文件,其值是src文件。
grunt.initConfig({ jshint: { myfile1: { files: { 'dest/destfile.js':['src/file1.js','src/file2.js'], 'dest/destfile1.js':['src/file3.js','src/file4.js'], }, }, myfile2: { files: { 'dest/destfile2.js':['src/file22.js','src/file23.js'], 'dest/destfile21.js':['src/file24.js','src/file25.js'], }, }, }, });
文件数组格式
它通过使用每个映射的附加属性来指定每个目标的src-dest文件映射。
grunt.initConfig({ jshint: { myfile1: { files: [ {src:['src/file1.js','src/file2.js'],dest:'dest/file3.js'}, {src:['src/file4.js','src/file4.js'],dest:'dest/file5.js'}, ], }, myfile2: { files: [ {src:['src/file6.js','src/file7.js'],dest:'dest/file8/', nonull:true}, {src:['src/file9.js','src/file10.js'],dest:'dest/file11/', filter:'isFalse'}, ], }, }, });
较旧的格式
在目标文件路径是目标名称的多任务存在之前,dest-as-target文件格式已经存在。以下格式已被弃用,且不在代码中使用。
grunt.initConfig({ jshint: { 'dest/destfile2.js':['src/file3.js','src/file4.js'], 'dest/destfile5.js':['src/file6.js','src/file7.js'], }, });
自定义过滤功能
您可以通过使用filter属性来帮助目标文件获得更高级别的细节。以下格式仅在与实际文件匹配时清除文件。
grunt.initConfig({ clean: { myfile:{ src: ['temp/**/*'], filter: 'isFile', }, }, });
通配符模式
通配符意味着扩展文件名称。Grunt通过使用内置节点glob和minimatch库支持globbing。通配模式包括以下几点 -
*
匹配任意数量的字符,但不匹配/。?
匹配单个字符,但不匹配/。**
匹配包括/的多个字符。{}
指定逗号分隔的“或”表达式列表。!
会在开始时否定模式匹配。
例如 -
{src: 'myfile/file1.js', dest: ...} // it specifies the single file {src: 'myfile/*.js', dest: ...} //it matches all the files ending wth .js {src: 'myfile/{file1,file2}*.js', dest: ...} //defines the single node glob pattern {src: ['myfile/*.js', '!myfile/file1.js'], dest: ...} // all files will display in alpha // order except for file1.js
动态构建文件对象
当您处理单个文件时,可以使用其他属性动态构建文件列表。当您将expand属性设置为true时,它将启用以下某些属性 -
- cwd将所有src匹配到此路径。
- src匹配匹配的模式,相对于cwd。
- dest属性指定目标路径前缀。
- ext将用dest路径中生成的值替换现有的扩展。
- extDot表示指示分机的时间段位于何处。它使用第一期或最后一期;默认情况下,它被设置为第一个时间段
- flatten从dest路径中删除所有路径部分。
- rename指定一个包含新目标和文件名的字符串。
重命名属性
这是一个独特的JavaScript函数,它返回一个字符串,并且不能使用字符串值进行重命名。在以下示例中,复制任务将创建README.md的备份。
grunt.initConfig({ copy: { backup: { files: [{ expand: true, src: ['docs/README.md'], // creating a backup of README.md rename: function () { // specifies the rename function return 'docs/BACKUP.txt'; // returns a string with the complete destination } }] } } });
模板
您可以使用<%%>
分隔符指定模板。从配置中读取它们时会自动扩展。它包括两种类型的属性 -
- <%= prop.subprop %> 属性用于扩展可以引用字符串值,数组和其他对象的config中的prop.subprop值。
- <% %> 属性执行用于控制流或循环的内联JavaScript代码
例如
grunt.initConfig({ concat: { myfile: { options: { banner: '/* <%= val %> */\n', }, src: ['<%= myval %>', 'file3/*.js'], dest: 'build/<%= file3 %>.js', }, }, // properties used in task configuration templates file1: 'c', file2: 'b<%= file1 %>d', file3: 'a<%= file2 %>e', myval: ['file1/*.js', 'file2/*.js'], });
导入外部数据
您可以从package.json文件导入外部数据。grunt-contrib-uglify插件可用于缩减源文件,并使用元数据创建标题注释。您可以使用grunt.file.readJSON和grunt.file.readYAML来导入JSON和YAML数据。
例如 -
grunt.initConfig({ pkg: grunt.file.readJSON('package.json'), uglify: { options: { banner: '/*! <%= pkg.name %> <%= grunt.template.today("yyyy-mm-dd") %> */\n' }, dist: { src: 'src/<%= pkg.name %>.js', dest: 'dist/<%= pkg.name %>.min.js' } } });
下一章:grunt 示例文件
在本章中,让我们使用以下插件创建一个简单的Grunt文件grunt-contrib-uglifygrunt-contrib-concatgrunt-contrib-jshintgrunt-contrib-watch安装 ...