grunt.initConfig()为Gruntfile.js的核心部分,它接收对象作为参数。
对象包含两种类型的属性,一种是单纯的变量,一种是task类型。举个栗子:
grunt.initConfig({ pkg: grunt.file.readJSON('package.json'), //单纯的变量,像我一样单纯 concat: {} //task类型 });
PS:所有单纯的变量可以'prefix<%=var%>suffix'的形式读取
task类型也包含两种类型的属性,一种是options,一种是具体的task(标准说法为target)
target同样包含两种类型的属性,一种是options,覆盖task类型的options,一种是files
以下例子使用grunt-contrib-concat,用于文件的合并
concat : { options : { separator : ';', //被覆盖 banner : '/*<%= grunt.template.today("yyyy-mm-dd") %>*/' }, test : { options : { separator : '<%= grunt.util.linefeed %>' }, files : [{ dest : 'dest/hello.js', src : ['src/*.js'] } ] } }
结构如下图
files部分是所有插件通用的,但options视task不同而不同,以下介绍files
files有三种写法,例子中最标准且复杂的一种
//第一种,满足所有要求 files : [{ dest : 'dest/hello.js', src : ['src/*.js'] } ] //第二种,无法设置其他参数 files : { 'dest/hello.js' : ['src/*.js'] } //第三种,只能设置单个任务 dest : 'dest/hello.js', src : ['src/*.js']
另外files中的path支持5种通配符
- *匹配separator之外的所有字符0-N
- ?匹配separator之外的所有字符1
- **匹配所有字符0-N
- {}匹配其中逗号分隔的表达式
- !反集合
最后是files的各个属性,分为两个部分,基础(src、dest、filter、nonull、dot、matchBase、expand)和扩展(cwd、ext、flatten、rename)
src: string or array 源文件
dest: string 目标文件
filter: function 传入src中各文件的filepath,筛选出返回true的作为源文件
string fs.Stats(node中的检测文件类型的类)的方法名
- isFile 普通文件
- isDirectory 文件夹
- isBlockDevice 块设备文件(POSIX概念,比如移动硬盘对应的文件)
- isCharacterDevice 字符设备文件(POSIX概念,比如键盘鼠标对应的文件)
- isSymbolicLink 软链接文件(POSIX概念,理解成windows下的快捷方式吧)
- isFIFO (POSIX概念,管道文件,用于进程间通信)
- isSocket (POSIX概念,套接字文件,用于端口通信)
nonull: 嗯,不太懂
dot: boolean 以.开头的文件(linux中的隐藏文件)亦作为源文件,默认为false
matchBase: 可能存在理解的偏差
我的case使用了下面的expand,目录结构为src下123/acb,acb/123,使用如下配置
files: [{ expand: true, cwd: 'src/', src: ['a?b'], dest: 'dist/' }]
目标文件夹下将出现acb文件夹,但不包含任何文件,而添加matchBase后
files: [{ expand: true, cwd: 'src/', src: ['a?b'], dest: 'dist/', matchBase: true }]
目标文件夹下将出现acb文件夹和123文件夹,acb文件夹为空,123文件夹下包含acb文件
expand: boolean 启用扩展属性,默认为false
dest(expand): string 目标文件夹
cwd: string src的相对路径
ext: string 生成文件的后缀名
expand: true, cwd: 'src/', src: ['*.js'], dest: 'dest/', ext: '.min.js'
flatten: boolean 为true则生成的文件统一放在dest文件夹中,无子文件夹,默认为false
expand: true, cwd: 'src/', src: ['*.js', '**/*.js'], dest: 'dest/', ext: '.min.js', flatten: true
rename: function 传入[dest, filepath, files],默认为return dest + filepath;
以上是initConfig的基本配置,还有瑕疵,下一篇开始从各个插件着手具体的应用。