初识grunt
文章目录
很早就听人提过grunt,我的概念里一直认为它是一个类似java界maven的东西,帮助开发人员从频繁地编译、配置管理等工作中解放出来。今天比较有空,就尝试使用一下这个东西,看看它是不是真的那么好用。
首先安装nodejs
#安装Homebrew
ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)"
#安装nodejs
brew install node
#安装grunt-cli
npm install -g grunt-cli
切换到工程目录,安装3个nodejs模块
npm install grunt --save-dev
npm install grunt-contrib-uglify --save-dev
npm install grunt-contrib-htmlmin --save-dev
在工程目录中新建一个Gruntfile.js
文件
module.exports = function(grunt) {
// Project configuration.
grunt.initConfig({
uglify: {
build: {
options: {
preserveComments: false,
compress: {
drop_console: true
},
banner: '/*! compress js file date : ' + '<%= grunt.template.today("yyyy-mm-dd") %> */'
},
files: [{
expand: true,
cwd: 'src/',
src: '**/*.js',
dest: 'build/'
}]
}
},
htmlmin: {
build: {
options: { // Target options
removeComments: true,
collapseWhitespace: true
},
files: [{
expand: true,
cwd: 'src/',
src: '**/*.html',
dest: 'build/'
}]
}
}
});
// 加载包含 "uglify" 任务的插件。
grunt.loadNpmTasks('grunt-contrib-uglify');
// 加载包含 "htmlmin" 任务的插件。
grunt.loadNpmTasks('grunt-contrib-htmlmin');
// 默认被执行的任务列表。
grunt.registerTask('default', ['uglify', 'htmlmin']);
};
这个文件需要理解一下每个Gruntfile(和Grunt插件)都使用下面这个基本格式,并且所有Grunt代码都必须指定在这个函数里面:
module.exports = function(grunt) {
// 在这里处理Grunt相关的事情
}
这个函数里面的内容一般会有一个项目配置、加载多个任务的插件、多个自定义任务,每个任务里又可以定义多个目标,每个任务和每个目标都可以有options配置,配置遵循就近原则(离目标越近,其优先级越高),大概形式如下:
// 项目配置
grunt.initConfig({
task1: {
options: {
},
target1: {
options: {
}
},
target2: {
}
},
task2: {
target1: {
},
target2: {
}
}
.....
});
// 加载提供"task1"任务的插件
grunt.loadNpmTasks('task1_node_module_name');
// 加载提供"task2"任务的插件
grunt.loadNpmTasks('task2_node_module_name');
....
grunt.registerTask('task3', ['task1:target1', 'task2']);
grunt.registerTask('default', ['task1', 'task2']);
然后就可以使用grunt task1:target1
, grunt task2
(这个会执行task2下的所有目标), grunt task3
来执行了, 其中名称叫default的自定义任务比较特殊,当直接执行grunt
时,会执行这个任务。
当然还一些高级特性,这个看看官方文档就清楚了,比如数据属性、多种多样的文件描述、项目脚手架等。
了解地差不多了,我准备把前两个写的那个pingdemo使用grunt来构建试试看,期间还稍微看了下bower。
安装bower
npm install -g bower
在项目根目录下创建bower.json
文件
{
"name": "pingdemo",
"version": "0.1.0",
"main": "build/main.js",
"ignore": [
"**/*.txt"
],
"dependencies": {
"jquery": "2.1.1"
},
"private": true
}
安装项目依赖的外部js文件
bower install
这样它会自动从github上下载jquery。
最后放出重新整理过工程结构的pingdemo地址
https://github.com/jeremyxu2010/pingdemo
文章作者 Jeremy Xu
上次更新 2014-05-30
许可协议 © Copyright 2020 Jeremy Xu