gruntjs是一个基于nodejs的自动化工具,只要熟悉nodejs或者又一定js经验就可以熟练应用。
1. 安装
a. 保证已安装了nodejs,并带有npm
b.安装客户端命令行工具,grunt 主页都有详细步骤,注意的是安装命令行工具而不是服务器版本。
1
npm install –g grunt-cli
安装完成后已经有了grunt,压缩css,js合并文件换需要grunt的插件,grunt只是一个平台,完成各种任务又对应的插件。Grunt的插件十分丰富目前又380个已帮助我们完成工作中的各种任务。
c. grunt插件中名字中有contrib的为官方插件,其他的为第三方插件。
2.进入工程目录
安装插件有两种方式
a.在工程目录中创建一个package.json文件
列出依赖的插件与对应版本即可
在命令行中进入该目录,执行
npm install
b.使用命令行工具
npm install grunt-contrib-watch –save-dev
3.创建gruntjs工程文件
a.gruntjs支持两种语言创建工程文件,可以使用gruntfile.js或者gruntfile.coffee
b.grunt工程文件遵守nodejs模块,主体结构为
module.exports = function(grunt) {
//ant project
grunt.initConfig({
//task
clean: {
//target
a: ['<%=temp%>']
},
b: ['<%=temp%>']
},
})
)}
c. 获取工程中要使用的插件
grunt.loadNpmTasks('grunt-contrib-clean');
grunt.loadNpmTasks('grunt-contrib-cssmin');
grunt.loadNpmTasks('grunt-contrib-uglify');
grunt.loadNpmTasks('grunt-contrib-watch');
grunt.loadNpmTasks('grunt-contrib-copy');
grunt.loadNpmTasks('grunt-includes');
d.注册任务
grunt.registerTask('build', ['clean', 'uglify', 'cssmin', 'includes', 'copy', 'clean']);
grunt.registerTask('default', ['build']);
在命令行中执行grunt 就会使用默认任务
要使用某个任务只用grunt taskname 如
grunt watch
一个完整的gruntjs工程文件(来自项目)
module.exports = function(grunt) {
var rt ='src-dev/',
indexDir = rt + 'index/',
tempDir = rt + 'temp/';
console.log(grunt.option('keys'));
grunt.file.exists(tempDir) && grunt.file.delete(tempDir);
grunt.file.mkdir(tempDir);
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
rt : rt,
temp: tempDir,
index : indexDir,
clean: {
build: ['<%=temp%>']
},
jsdoc : {
dist : {
src : '<%=index%>doc.js',
options : {
destination : '<%=rt%>../out/'
}
}
},
cssmin: {
//debug : true,
combine: {
files: {
'<%=temp%>c.min.css': ['<%=rt%>common/reset.css', '<%=index%>c.css']
}
}
},
includes : {
files: {
//debug: true,
src: ['<%=rt%>**/*.
'],
dest: '<%=temp%>',
cwd: '.',
flatten: true,
options: {
banner: ''
}
}
},
watch : {
files : ['<%=index%>j.js','<%=index%>*.html' ,'<%=index%>c.css'],
tasks : ['clean', 'uglify', 'cssmin', 'includes', 'copy', 'clean'],
//debug : true,
options: {
livereload: true
}
},
uglify: {
dist: {
files: {
'<%=temp%>j.js': ['<%=index%>*.js']
}
}
},
copy: {
main: {
files: [
{
flatten: true,
expand: true,
filter: 'isFile',
src: ['<%=temp%>index.html'],
dest: '<%=rt%>../src/'
},
//{src: ['<%=temp%>doc/**'], dest: '<%=temp%>../'},
]
}
}
});
grunt.loadNpmTasks('grunt-contrib-clean');
grunt.loadNpmTasks('grunt-contrib-cssmin');
grunt.loadNpmTasks('grunt-contrib-uglify');
grunt.loadNpmTasks('grunt-contrib-watch');
grunt.loadNpmTasks('grunt-contrib-copy');
grunt.loadNpmTasks('grunt-includes');
grunt.loadNpmTasks('grunt-devtools');
grunt.registerTask('build', ['clean', 'uglify', 'cssmin', 'includes', 'copy', 'clean']);
grunt.registerTask('default', ['build']);
};