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']); };