Orion's Studio.

Grunt初探

2018/06/29

概要

Grunt 是一款构建工具,它可以创建任务,完成对配置里的源文件执行插件对应的操作后生成目标文件的操作,从而实现压缩、编译、单元测试、linting 等工作

前提准备

需要安装gruntgrunt-cligrunt-cli一般为全局安装,而grunt一般为本地项目内的

在项目中执行grunt-cligrunt命令,就会利用 node 的require()查找本地安装的 Grunt,所以在项目的任意子目录中运行即可

必要文件

package.json: grunt 和 Grunt 插件都安装在 devDependencies 配置段内,grunt-init脚手架可以创建出默认模板

Gruntfile: 用来配置或定义任务(task)并加载 Grunt 插件,一般命名为 Gruntfile.js 或 Gruntfile.coffee

Gruntfile 构成

  • “wrapper”函数
  • 项目与任务配置
  • 加载 grunt 插件和任务
  • 自定义任务
“wrapper”函数
1
module.exports = function(grunt) {};
项目与任务配置

定义在一个 object 中,并传递给grunt.initConfig 方法

在这个对象里模板字符串<% %>可以引用任意配置属性,一般都会pkg: grunt.file.readJSON('package.json')引入项目元数据(metadata),然后用<% pkg.name %>使用里面的属性

每个属性都是一个 task,里面有诸如options(配置项,里面会有诸如banner,可以用来在文件顶部生成一个注释)、src(来源文件,可以采用数组形式,可以使用通配符)、dest(目标文件或目录)等默认值

还可以在 task 里加入 target,比如

1
2
3
4
5
6
7
8
9
grunt.initConfig({
concat: {
options: {},
foo: {
options: {},
},
bar: {},
},
});

就定义了 foo 和 bar 两个对象,可以通过grunt concat:foo来单独处理该目标,而默认则会遍历所有目标并依次处理

加载 Grunt 插件和任务

grunt-contrib-uglify已经通过 npm 安装

1
grunt.loadNpmTasks('grunt-contrib-uglify');
自定义任务

定义default任务可以让 Grunt 默认执行多个任务(即运行grunt命令时不指定参数)

1
grunt.registerTask("default", ["jshint", "uglify"]);

插件

常用插件

grunt-contrib-uglify

使用 UglifyJS 压缩 js 文件

grunt-contrib-cssmin

压缩 css 文件

grunt-contrib-htmlmin

压缩 html 文件

grunt-contrib-imagemin

压缩图片

grunt-contrib-jshint

使用 JSHint 检查 js 语法

grunt-contrib-qunit

使用 PhantomJS 实现自动化单元测试

grunt-contrib-less

将 LESS 编译成 CSS

grunt-contrib-concat

连接、合并文件

grunt-contrib-copy

复制文件和文件夹

grunt-contrib-clean

清空文件和文件夹

grunt-contrib-watch

文件发生改变时运行任务

grunt-contrib-connect

构建静态文件服务器,本身集成了 livereload

创建插件

  1. 全局安装grunt-init
  2. 安装 Grunt 插件模板git clone git://github.com/gruntjs/grunt-init-gruntplugin.git ~/.grunt-init/gruntplugin
  3. 在空目录执行grunt-init gruntplugin

“grunt-contrib”命名空间保留给 Grunt 团队使用

CATALOG
  1. 1. 概要
  2. 2. 前提准备
  3. 3. 必要文件
    1. 3.1. Gruntfile 构成
      1. 3.1.1. “wrapper”函数
      2. 3.1.2. 项目与任务配置
      3. 3.1.3. 加载 Grunt 插件和任务
      4. 3.1.4. 自定义任务
  4. 4. 插件
    1. 4.1. 常用插件
      1. 4.1.1. grunt-contrib-uglify
      2. 4.1.2. grunt-contrib-cssmin
      3. 4.1.3. grunt-contrib-htmlmin
      4. 4.1.4. grunt-contrib-imagemin
      5. 4.1.5. grunt-contrib-jshint
      6. 4.1.6. grunt-contrib-qunit
      7. 4.1.7. grunt-contrib-less
      8. 4.1.8. grunt-contrib-concat
      9. 4.1.9. grunt-contrib-copy
      10. 4.1.10. grunt-contrib-clean
      11. 4.1.11. grunt-contrib-watch
      12. 4.1.12. grunt-contrib-connect
    2. 4.2. 创建插件