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种通配符

  1. *匹配separator之外的所有字符0-N
  2. ?匹配separator之外的所有字符1
  3. **匹配所有字符0-N
  4. {}匹配其中逗号分隔的表达式
  5. !反集合

最后是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中的检测文件类型的类)的方法名

  1. isFile 普通文件
  2. isDirectory 文件夹
  3. isBlockDevice 块设备文件(POSIX概念,比如移动硬盘对应的文件)
  4. isCharacterDevice 字符设备文件(POSIX概念,比如键盘鼠标对应的文件)
  5. isSymbolicLink 软链接文件(POSIX概念,理解成windows下的快捷方式吧)
  6. isFIFO (POSIX概念,管道文件,用于进程间通信)
  7. 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的基本配置,还有瑕疵,下一篇开始从各个插件着手具体的应用。

没有闲话和grunt.initConfig()的更多相关文章

  1. 闲话和grunt

    一年半没更新是因为自己转岗了,android framework+system转前端,可以想象过程之苦逼,苦成了一首诗:很烦很烦/非常烦/非常非常十分烦/特别烦特烦/极其烦/贼烦/简直烦死了/啊——. ...

  2. AngularJS——grunt神器的安装

    前言: 刚开始学 angularJS,在慕课网上看的大漠老师的视频(http://www.imooc.com/learn/156),里面刚开始讲述了前端开发-调试-测试所使用的手段和工具,本人对前端开 ...

  3. grunt之concat、cssmin、uglify

    周末有点懒,跑去看了<智取威虎山>,手撕鬼子的神剧情节被徐老怪一条回忆线就解释过去了,牛到极致尽是这种四两拨千斤的处理方式,手撕加分,四星推荐. --------------------- ...

  4. 初学seaJs模块化开发,利用grunt打包,减少http请求

    原文地址:初学seaJs模块化开发,利用grunt打包,减少http请求 未压缩合并的演示地址:demo2 学习seaJs的模块化开发,适合对seajs基础有所了解的同学看,目录结构 js — —di ...

  5. grunt配置任务

    这个指南解释了如何使用 Gruntfile 来为你的项目配置task.如果你还不知道 Gruntfile 是什么,请先阅读 快速入门 指南并看看这个Gruntfile 实例. Grunt配置 Grun ...

  6. 快速开发Grunt插件----压缩js模板

    前言 Grunt是一款前端构建工具,帮助我们自动化搭建前端工程.它可以实现自动对js.css.html文件的合并.压缩等一些列操作.Grunt有很多插件,每一款插件实现某个功能,你可以通过npm命名去 ...

  7. 应用Grunt自动化地优化你的项目前端

    在不久前我曾写了一篇 应用r.js来优化你的前端 的文章,为大家介绍了r.js这个实用工具,它可以很好地压缩.合并前端文件并打包整个项目.但是如果将r.js放到项目中,我们不得不顾及到一个问题——项目 ...

  8. Grunt(页面静态引入的文件地址的改变探究)-V2.0

    相关插件的引用: grunt-usemin  对页面的操作 grunt-contrib-cssmin  压缩css load-grunt-tasks 瘦身gruntfile grunt-rev给md5 ...

  9. grunt自定义任务——合并压缩css和js

    npm文档:www.npmjs.com grunt基础教程:http://www.gruntjs.net/docs/getting-started/ http://www.w3cplus.com/to ...

随机推荐

  1. n以内质数占的比例

    2 ->0.5 10 ->0.4 100-> 0.25 1000->0.168 10000->0.1229 100000->0.09592 1000000-> ...

  2. Java 架构师之路(2)

    一.技术 J2EE技术是架构师的基础.1.<Java编程思想> 初学Java时阅读这本书觉得好难,阅读第二遍时才觉得讲的很细致.这是一本不怕多读的好书. 2.<J2EE应用与BEA ...

  3. Eclipse中的Debug

    一.Debug的基本过程 设置断点(双击待设断点左边行号处) 进入Debug模式(在待调试类上右键>调试方式,根据需求选择) 开始调试 二.Debug中的常用操作 继续执行[F8]:继续运行程序 ...

  4. 二分图最大匹配:匈牙利算法的python实现

    二分图匹配是很常见的算法问题,一般用匈牙利算法解决二分图最大匹配问题,但是目前网上绝大多数都是C/C++实现版本,没有python版本,于是就用python实现了一下深度优先的匈牙利算法,本文使用的是 ...

  5. Luogu P1649 [USACO07OCT]障碍路线Obstacle Course

    题目描述 Consider an N x N (1 <= N <= 100) square field composed of 1 by 1 tiles. Some of these ti ...

  6. Linux学习(1)-常用快捷键、文件管理和查询

    有话要说 为什么要用Linux?要用Linux的原因太多,想说说不完啊. 如果你说用Linux只是为了装逼,那证明你真的还很菜.不排除有装逼了因素,那也只占非常少的比例,可以忽略不计. 我们反问一下, ...

  7. Java连接数据库的4中方式详解

    Java连接数据库的方式有多种:根据所需要的不同数据库驱动分,分为四种: 1:1类驱动.这就是JDBC-ODBC桥的方式. 但这种方式不适合程序的重用与维护,不推荐使用.需要数据库的ODBC驱动. 2 ...

  8. 采用SmartQQ 协议可制作聊天机器人

    采用.NET CORE可运行在 Linux . Windows 和 Mac OSX 平台下. SmartQQ可以: 收发文字消息 获取好友.群.讨论组.好友分组和最近会话的列表 SmartQQ不可以: ...

  9. OpenPop.NET

    OpenPop用于接收邮件,可以读取邮件内容或者邮件附件内容导入到系统中 http://hpop.sourceforge.net/documentation/index.html

  10. shell 多进程

    shell 多进程来模拟多线程 (1){ } 建立代码块 (2)使用 & 将进程放入后台 [zheng@localhost ~]$ cat threads.sh #!/bin/bash ;i& ...