Grunt使用教程
Grunt是一个基于JavaScript上的一个很强大的任务管理器(task runner),简单来说,可以通过JavaScript去执行一些程序来完成一些任务,学习grunt主要就是学习grunt插件的配置。
grunt-cli
安装命令行运行:
npm install -g grunt-cli
这样就在全局安装了一个grunt命令行接口,它的作用仅仅是运行安装在GruntFile.js 同目录下的grunt。每次运行grunt时,它都会使用node的require()
查找本地已安装好的grunt。正因为如此,你可以从你项目的任意子目录运行grunt。
现在运行grunt命令会出现
grunt
安装新建一个本地项目,命令行运行:
npm install grunt --save-dev
这样本地项目的grunt就安装好了,在node_modules下会多出grunt文件夹
注意:--save-dev
的作用是把grunt添加到package.json的依赖中。
npm install
正是通过package.json文件中的依赖,在本地安装项目所需插件的。
添加package.json和Gruntfile.js
要正确运行Grunt项目,必须依赖于package.json和Gruntfile.js文件。
package.json文件中定义了项目要依赖的相关插件和项目的基本信息如name
、description
、version
等……
文件结构大概像下面这样:
package.json文件的创建非常简单
命令行下切换到项目目录,运行:
npm init
回答几个问题就可以创建一个最基本的package.json文件。
Gruntfile.js文件中定义了一些grunt任务。
文件结构大概像下面这样:
Gruntfile.js可以通过手工方式创建,也可以通过运行grunt-init
的方式创建,详细介绍在这里
tips:
grunt.registerTask('default',['caompass']);
是注册一个grunt任务,这样我们就可以在命令行通过:
grunt default
的方式运行这个任务,因为default表示默认的任务,所以也可以直接在命令行输入
grunt
来运行这个任务,如果不想把compass配置为默认的任务,只需要把default替换成任意一个别名即可如:
grunt.registerTask('c',['compass']);
唯一需要注意的是别名不可以和数组中的任务名相同,否则会报如下错误:
grunt-contrib-compass举个栗子
以module.exports = function (grunt) {
grunt.initConfig({
compass: {
task_1:{
options: {
sassDir: 'scss',
cssDir: 'css',
outputStyle: 'nested',
sourcemap: true,
debugInfo: true,
noLineComments: true,
force: false
}
},
task_2:{},
task_3:{}
}
});
grunt.loadNpmTasks('grunt-contrib-compass');
grunt.registerTask(c,['compass']);
grunt.registerTask(taskone,['compass:task_1']);
}
task_1,task_2,task_3是自定义的任务名,表示compass中的一个任务,可以在compass中以json的形式定义多个任务。
sassDir是scss/sass文件的存放目录相当于config.rb中的sass_dir
specify是指定编译某些文件,适用于不需要对某个文件夹下的文件全部编译的情况。
sourecemap和debugInfo为true时可以在浏览器中进行调试,显示当前样式在scss文件中的多少行
这就是一份简单的grunt配置,可以在命令行运行:
grunt c
来执行compass下的全部任务['task_1','task_2','task_3'];
也可以运行:
grunt compass:task_1
or
grunt taskone
来执行单独的task_1任务
其他一些会用到的插件:
grunt-contrib-watch监控文件变化
BrowserSync自动刷新浏览器
grunt-contrib-concat文件合并
grunt-contrib-uglify压缩js
load-grunt-tasks自动加载插件
grunt-replace-filename替换字符串
grunt-rev重命名文件增加md5戳
grunt-contrib-copy拷贝文件
grunt-contrib-clean清除文件
grunt-contrib-jshintjs代码检查
grunt-contrib-htmlminhtml压缩