1、首先在项目中安装grunt以及Grunt所需的插件。
做法:
(1)在项目的package.json文件中(如果没有,可以自己新建一个),写入
{
"name": "grunt_test",
"version": "1.0.0",
}
(2) 然后在项目的控制台,输入安装命令,用到什么装什么,比如:
npm install grunt --save-dev(开发模式安装)
npm install grunt -g(全局安装)
npm install grunt-contrib-concat --save-dev
npm install grunt-contrib-cssmin --save-dev
npm install grunt-contrib-jshint --save-dev
npm install grunt-contrib-uglify --save-dev
npm install grunt-contrib-watch --save-dev
(3)最终package.json文件如下:
2、编写Gruntfile.js文件(自己创建,开头G要大写)
module.exports = function(grunt) {
//初始化配置grunt任务
grunt.initConfig({
//concat是合并文件的任务
concat: { //任务名
options: {
separator: ';'
},
build: {
src: ["src/js/*.js"], //合并哪些js文件
dest: "build/js/built.js" //输出的js
}
},
//uglify压缩合并生成的文件
pkg: grunt.file.readJSON('package.json'),
uglify: {
options: {
banner: '/*! <%= pkg.name %> - v<%= pkg.version %> - ' +
'<%= grunt.template.today("yyyy-mm-dd") %> */'
},
my_target: {
files: {
'build/js/built.min.js': ['build/js/built.js']
}
}
},
//jshint检查js的语法
jshint:{
options:{
jshintrc: '.jshintrc' //指定配置文件
},
build: ['Gruntfile.js', 'src/js/*.js'] //指定检查的文件
},
//cssmin是合并并压缩所有css文件的任务
cssmin: {
options: {
shorthandCompacting: false,
roundingPrecision: -1
},
target: {
files: {
'build/css/build.min.css': ['src/css/*.css']
}
}
},
//watch实时监控文件的改变并更新页面
watch: {
scripts: {
files: ['src/js/*.js', 'src/css/*.css'],
tasks: ['concat','jshint','uglify','cssmin'],
options: {
spawn: false,
},
},
},
});
// 加载对应的任务插件
grunt.loadNpmTasks('grunt-contrib-concat');//合并
grunt.loadNpmTasks('grunt-contrib-uglify');//压缩
//js语法检查插件
grunt.loadNpmTasks('grunt-contrib-jshint');//检查js语法格式
grunt.loadNpmTasks('grunt-contrib-cssmin');//合并压缩css
grunt.loadNpmTasks('grunt-contrib-watch');//监控
// 默认被执行的任务列表
grunt.registerTask('default', ['concat', 'uglify', 'jshint', 'cssmin']);
grunt.registerTask('build', ['default', 'watch'])
};
3、其中,.jshintrc文件如下:
{
"curly": true,
"eqeqeq": true,
"eqnull": true,
"expr": true,
"immed": true,
"newcap": true,
"noempty": true,
"noarg": true,
"regexp": true,
"browser": true,
"devel": true,
"node": true,
"boss": false,
"undef": true,
"asi": false,
"predef": ["define","BMap","angular","BMAP_STATUS_SUCCESS"]
}