目前正在参与开发的一个项目是采用AMD规范来组织每一个模块的代码和其依赖性,每一个模块包括其对应的html模板、css样式表以及Javascript文件。具体的目录结构以下图所示:javascript
在项目发布以前,咱们每每须要将项目文件好比JavaScript文件、CSS样式表等进行压缩混淆,这么作的目的主要在于减小加载文件的带宽,加快文件加载速度,同时也能在必定程度上保护源代码,提升安全性。Grunt是一个基于NodeJS的自动化构建工具,可以自动完成一些须要反复重复的任务,例如代码压缩混淆、编译、文件拷贝等。css
下面本人详细介绍如何利用Grunt来实现将modules目录下的全部模块自动拷贝到dist/modules目录,而且尽量的压缩每一个模块的资源文件。html
1.首先安装grunt和所需的grunt插件java
要使用grunt,首先须要安装grunt-cli到全局环境中,在命令行窗口中执行以下命令:npm
npm install -g grunt-cli
而后进入项目根目录,并执行以下命令:json
npm install grunt –-save-dev
这条命令是安装最新版的grunt到项目根目录,--save-dev表示将其添加到package.json文件的devDependencies内。安全
而后安装所需的grunt插件,并添加到devDependencies内。grunt
npm install grunt-contrib-uglify –-save-dev npm install grunt-contrib-cssmin –-save-dev npm install grunt-contrib-copy –-save-dev
2.建立Gruntfile而且配置任务工具
1 module.exports = function(grunt){ 2 "use strict"; 3 4 grunt.initConfig({ 5 pkg: grunt.file.readJSON("package.json"), 6 copy: { 7 module_target: { 8 files: [{ 9 expand: true, 10 cwd: "WebContent/modules", 11 src: "**/*", 12 dest: "WebContent/dist/modules", 13 filter: "isFile" 14 }] 15 } 16 }, 17 cssmin: { 18 module_target: { 19 files: [{ 20 expand: true, 21 cwd: "WebContent/modules", 22 src: "**/*.css", 23 dest: "WebContent/dist/modules/", 24 ext: ".css" 25 }] 26 } 27 }, 28 uglify: { 29 options: { 30 banner: "/*! <%= pkg.name %> <%= grunt.template.today('yyyy-mm-dd') %> */\n", 31 mangle: true, 32 compress: { 33 drop_console: true 34 } 35 }, 36 module_target: { 37 files: [{ 38 expand: true, 39 cwd: "WebContent/modules", 40 src: "**/*.js", 41 dest: "WebContent/dist/modules", 42 ext: ".js" 43 }] 44 } 45 } 46 }); 47 48 grunt.loadNpmTasks("grunt-contrib-uglify"); 49 grunt.loadNpmTasks("grunt-contrib-cssmin"); 50 grunt.loadNpmTasks("grunt-contrib-copy"); 51 52 grunt.registerTask("default",["copy:module_target", "uglify:module_target", "cssmin:module_target"]); 53 };
在grunt中,可使用通配符来匹配文件路径和文件名,*匹配任意数量的字符,但不包括目录分隔符/,**匹配任意数量的字符,并且包括目录分隔符/。因此modules/**/*.js可以匹配modules目录以及其子目录中全部以.js结尾的文件。spa
咱们将其设置为grunt的默认任务,这样在根目录使用grunt命令就可以运行该任务了。
3.利用bat批处理文件自动执行grunt任务
另外咱们还能够编写一个bat文件来执行grunt任务。本人项目位于D盘jee workspace目录下,那么bat文件具体以下:
1 @echo off 2 echo minify javascript and css with grunt 3 4 D: 5 cd D:\\jee workspace\\myproject 6 grunt 7 8 echo Press any key to continue.... 9 pause
保存后,双击运行该bat就可以自动压缩构建模块了。