1.package.json
{
"name": "fs-service-mweb",
"common":"src/main/webapp/static/themes/common",
"mweb":"src/main/webapp/static/themes/mweb",
"wxres":"src/main/webapp/static/themes/wxres",
"version": "1.0.0",
"description": "fs-service-mweb",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"dependencies": {
"grunt": "^1.0.1"
},
"devDependencies": {
"grunt": "*",
"grunt-contrib-livereload": "*",
"grunt-htmlhint":"*",
"grunt-contrib-jshint": "*",
"grunt-contrib-csslint":"*",
"grunt-contrib-concat":"*",
"grunt-contrib-htmlmin":"*",
"grunt-contrib-imagemin":"*",
"grunt-contrib-cssmin":"*",
"grunt-contrib-uglify": "*",
"grunt-contrib-watch":"*",
"matchdep":"*"
},
"keywords": [
"kxll",
"mweb"
],
"author": "cheonghu",
"license": "ISC"
}
2.gruntfile.js
module.exports = function (grunt) {
'use strict';
grunt.initConfig({
pkg:grunt.file.readJSON('package.json'),
htmlhint: {
htmls: {
options: {
'tag-pair': true
},
src: ['<%=pkg.mweb%>/templates/dev/**/*.html']
}
},
csslint: {
/* 检查 CSS 语法 */
src: ['<%=pkg.mweb%>/css/dev/**/*.css']
},
jshint: {
/* 检查 js 语法 */
all: ['Gruntfile.js','<%=pkg.common%>/plugin/**/*.js',
'<%=pkg.common%>/js/**/*.js',
'<%=pkg.mweb%>/js/dev/**/*.js']
},
imagemin: {
/* 压缩优化图片大小 */
dist: {
options: {
optimizationLevel: 3
},
files: [
{
expand: true,
cwd: '<%=pkg.mweb%>/images/',
src: ['**/*.{png,jpg,jpeg}'], // 优化 img 目录下所有 png/jpg/jpeg 图片
dest: '<%=pkg.mweb%>/images/' // 优化后的图片保存位置,默认覆盖
},
{
expand: true,
cwd: '<%=pkg.wxres%>/',
src: ['**/*.{png,jpg,jpeg}'], // 优化 img 目录下所有 png/jpg/jpeg 图片
dest: '<%=pkg.wxres%>/' // 优化后的图片保存位置,默认覆盖
},
]
}
},
concat: {
/* 合并 CSS 文件 */
main_css: {
src: [
'<%=pkg.mweb%>/css/dev/reset.css',
'<%=pkg.mweb%>/css/dev/stylesd.css',
],
/* 根据目录下文件情况配置 */
dest: '<%=pkg.mweb%>/css/dev/main.css'
},
/* 合并 js 文件 */
common_js:{//插件需要指定合成顺序
src: ['<%=pkg.common%>/plugin/angular/angular.min.js',
'<%=pkg.common%>/plugin/angular/angular-route.min.js',
'<%=pkg.common%>/plugin/angular/angular-touch.min.js',
'<%=pkg.common%>/plugin/angular/sanitize.min.js',
'<%=pkg.common%>/js/dev/boot.js',
'<%=pkg.common%>/js/dev/wx_init.js',
'<%=pkg.common%>/js/dev/locache.js',
'<%=pkg.common%>/js/dev/base64.js',
],
/* 根据目录下文件情况配置 */
dest: '<%=pkg.common%>/js/dev/common.js'
},
},
htmlmin: { //html 压缩 // Task
dist: { // Target
options: { // Target options
removeComments: true,
collapseWhitespace: true,
processScripts:['text/ng-template'],
ignoreCustomComments:[ /^!/ ]
},
files: [{
expand: true,
cwd: '<%=pkg.mweb%>/templates/dev/',
src: '**/*.html',
dest: '<%=pkg.mweb%>/templates/min/'
}]
},
},
cssmin: {
/*压缩 CSS 文件为 .css */
options: {
keepSpecialComments: 0 /* 移除 CSS 文件中的所有注释 */
},
minify: {
files: [
{
expand: true,
cwd:'<%=pkg.mweb%>/css/dev/',
src: ['**/*.css'],
dest: '<%=pkg.mweb%>/css/min/',
ext: '.css'
},
]
}
},
uglify: {
minjs: {
files: [
{
expand: true, // Enable dynamic expansion.
cwd: '<%=pkg.common%>/js/dev/', // Src matches are relative to this path.
src: ['common.js'], // Actual pattern(s) to match.
dest: '<%=pkg.common%>/js/min/', // Destination path prefix.
ext: '.js', // Dest filepaths will have this extension.
},
{
expand: true, // Enable dynamic expansion.
cwd: '<%=pkg.mweb%>/js/dev/', // Src matches are relative to this path.
src: ['**/*.js'], // Actual pattern(s) to match.
dest: '<%=pkg.mweb%>/js/min/', // Destination path prefix.
ext: '.js', // Dest filepaths will have this extension.
},
],
},
},
watch: {
/* 监控文件变化并执行相应任务 */
img: {
files: ['<%=pkg.mweb%>/images/**/*.{png,jpg,jpeg}'],
tasks:['imageTask'],
options: {
livereload: true
}
},
css: {
options: {
event: ['changed', 'added'],
livereload: true
},
tasks:['cssTask'],
files: [
'<%=pkg.mweb%>/css/dev/**/*.css',
]
},
js: {
options: {
livereload: true
},
tasks:['jsTask'],
files: ['Gruntfile.js','<%=pkg.mweb%>/js/dev/**/*.js',
'<%=pkg.common%>/js/dev/**/*.js']
},
html: {
options: {
livereload: true
},
tasks:['htmlTask'],
files: ['<%=pkg.mweb%>/template/**/*.html']
}
}
});
grunt.loadNpmTasks('grunt-contrib-livereload');
grunt.loadNpmTasks('grunt-htmlhint');
grunt.loadNpmTasks('grunt-contrib-csslint');
grunt.loadNpmTasks('grunt-contrib-jshint');
grunt.loadNpmTasks('grunt-contrib-concat');
grunt.loadNpmTasks('grunt-contrib-htmlmin');
grunt.loadNpmTasks('grunt-contrib-cssmin');
grunt.loadNpmTasks('grunt-contrib-imagemin');
grunt.loadNpmTasks('grunt-contrib-uglify');
grunt.loadNpmTasks('grunt-contrib-watch');
// 定义默认任务
grunt.registerTask('default', ['imageTask','htmlTask','cssTask','jsTask']);
//注册监听任务
grunt.registerTask('watchTask', ['watch']);
grunt.registerTask('imageTask', ['imagemin']);
grunt.registerTask('htmlTask',['htmlhint','htmlmin']);
grunt.registerTask('jsTask', ['jshint','concat:common_js','uglify']);
grunt.registerTask('cssTask', ['csslint','concat:main_css','cssmin']);
};