经过前面的学习,将测试的Gruntfile整合在一起!

  1. /**
  2. * Created by Administrator on 2017/6/22.
  3. */
  4. module.exports = function(grunt){
  5. "use strict";
  6. grunt.initConfig({
  7. pkg: grunt.file.readJSON("package.json"), //将存储在package.json文件中的grunt 版本信息和各个插件的数据信息引入到grunt config中
  8. copy: { //copy任务,把所有文件拷贝到功能代码目录下,即EngineeringCode目录
  9. module_target: { //copy任务目标,任务名是固定的“任务名称”属性,目标名可以随意定,不重复就行
  10. files: [{ //files特性,表示执行任务目标时,会自动新建固定名称的文件夹,比如scripts,style等
  11. expand: true,
  12. cwd: "SourceCode/", //所有src指定的匹配都将相对于此处指定的路径(即该路径是基础路径,但不包括此路径)
  13. src: ['**/*'],
  14. dest: "EngineeringCode/", //dest 生成的目标文件路径前缀,即重新生成的这些文件后放到什么位置。
  15. filter: "isFile",
  16. extDot: 'first'
  17. }]
  18. }
  19. },
  20.  
  21. concat: { //将指定目录下的js文件拼接成一个js文件,CSS文件拼接成一个CSS文件
  22. options: {
  23. separator: ';',
  24. stripBanners: true,
  25. banner: '/*! hello - v1.2.3 - 2014-2-4 */'
  26. },
  27. dist: { //concat任务目标1,将EngineeringCode/VarMesSignMan下的所有js文件拼接成一个.min.js文件
  28. //files:[{
  29. // expand: true,
  30. // cwd: "EngineeringCode/",
  31. // src: ['**/*.js'],
  32. // dest: "EngineeringCode/zipFile/all.js",
  33. // //ext: ".min.js",
  34. // //extDot: 'first'
  35. //}]
  36. src: "EngineeringCode/**/*.js", //将EngineeringCode目录下包括子文件夹下的所有css文件
  37. dest: "EngineeringCode/zipFile/scripts/all.js" //合并到dest路径下名为all.js的文件
  38. },
  39. dist2: { //concat任务目标2,将EngineeringCode/VarMesSignMan下的所有css文件拼接成一个.min.css文件
  40. src: "EngineeringCode/**/*.css", //EngineeringCode目录下包括子文件夹下的所有css文件
  41. dest: "EngineeringCode/zipFile/style/all.css" //合并到dest路径下名为all.css 的文件
  42. }
  43. },
  44.  
  45. cssmin: { //cssmin任务,将指定目录下的css文件压缩成 .min.css文件
  46. options: {
  47. separator: ';',
  48. stripBanners: true,
  49. banner: '/*! hello - v1.2.3 - 2014-2-4 */'
  50. },
  51. my_target:{ //cssmin任务目标1,将EngineeringCode/VarMesSignMan下的所有css文件压缩成.min.css文件
  52. files: [{
  53. expand: true,
  54. cwd: 'EngineeringCode/VarMesSignMan/style', //所有src指定的匹配都将相对于此处指定的路径(即该路径是基础路径,但不包括此路径)
  55. src: '**/*.css',
  56. dest: 'EngineeringCode/VarMesSignMan/style', //dest 生成的目标文件路径前缀,即重新生成的这些文件后放到什么位置。
  57. ext: ".min.css", //ext 对于生成的dest路径中所有实际存在文件,均使用这个属性值替换扩展名。
  58. extDot: 'first' //extDot 用于指定标记扩展名的英文点号的所在位置。可以赋值 'first' (扩展名从文件名中的第一个英文点号开始) 或 'last' (扩展名从最后一个英文点号开始),默认值为 'first'
  59. }]
  60. },
  61. my_target2:{ //cssmin任务目标2,将EngineeringCode/BiInterface下的所有css文件压缩成.min.css文件
  62. files: [{
  63. expand: true,
  64. cwd: 'EngineeringCode/BiInterface/style',
  65. src: '**/*.css',
  66. dest: 'EngineeringCode/BiInterface/style',
  67. ext: ".min.css",
  68. extDot: 'first'
  69. }]
  70. }
  71. },
  72.  
  73. uglify: { //uglify任务,将指定目录下的js文件压缩成 .min.js文件
  74. options: {
  75. separator: ';',
  76. stripBanners: true,
  77. banner: '/*! hello - v1.2.3 - 2014-2-4 */'
  78. },
  79. my_target:{ //uglify任务目标1,将EngineeringCode/VarMesSignMan下的所有js文件压缩成.min.js文件
  80. files: [{
  81. expand: true,
  82. cwd: 'EngineeringCode/VarMesSignMan/scripts',
  83. src: '**/*.js',
  84. dest: 'EngineeringCode/VarMesSignMan/scripts',
  85. ext: ".min.js",
  86. extDot: 'first'
  87. }]
  88. },
  89. my_target2:{ //uglify任务目标2,将EngineeringCode/BiInterface下的所有js文件压缩成.min.js文件
  90. files: [{
  91. expand: true,
  92. cwd: 'EngineeringCode/BiInterface/scripts',
  93. src: '**/*.js',
  94. dest: 'EngineeringCode/BiInterface/scripts',
  95. ext: ".min.js",
  96. extDot: 'first'
  97. }]
  98. }
  99. },
  100. clean: { //clean任务,将指定目录下的指定格式文件删除
  101. js: { //clean任务目标1,将EngineeringCode目录下的所有非 .min.js文件删除
  102. src: ['EngineeringCode/**/*.js','!EngineeringCode/**/*min.js','!EngineeringCode/**/*all.js']
  103. },
  104. css: { //clean任务目标2,将EngineeringCode目录下的所有非 .min.css文件删除
  105. src: ['EngineeringCode/**/*.css','!EngineeringCode/**/*min.css','!EngineeringCode/**/*all.css']
  106. }
  107. }
  108. });
  109.  
  110. grunt.loadNpmTasks("grunt-contrib-copy"); //加载能够提供"copy"任务的插件。加载其他插件和此方法相同
  111. grunt.loadNpmTasks("grunt-contrib-concat");
  112. grunt.loadNpmTasks("grunt-contrib-cssmin");
  113. grunt.loadNpmTasks("grunt-contrib-uglify"); //加载能够提供"uglify"任务的插件。加载其他插件和此方法相同
  114. grunt.loadNpmTasks("grunt-contrib-watch");
  115. grunt.loadNpmTasks("grunt-contrib-clean");
  116.  
  117. grunt.registerTask("default",["copy:module_target","concat","cssmin","uglify","clean"]); //通过定义 default 任务,可以让Grunt默认执行一个或多个任务。
  118. };

  最后,取个巧,如果不想在命令行执行grunt命令,可以利用bat批处理文件自动执行grunt任务。

  编写一个bat文件来执行grunt任务。测试项目位于E盘FrontEndCompression目录下,bat文件具体如下。保存后,双击运行该bat就能够自动压缩构建模块了。

  1. @echo off
  2. title 【文件压缩处理】
  3. color 03f
  4. echo minify javascript and css with grunt
  5.  
  6. E:
  7. cd E:\\Work_Test\\FrontEndCompression\\SourceCode
  8. grunt
  9.  
  10. echo Press any key to continue....
  11. pause

  根目录文件夹下所有文件

  

  未执行 grunt 时,EngineeringCode现为空文件夹

  

  在执行 grunt 后,完成了将SourceCode文件夹内的文件拷贝到EngineeringCode文件夹内的一系列操作!

  

Grunt入门学习之(3) -- Gruntfile具体示例的更多相关文章

  1. Grunt入门学习之(2) -- Gruntfile的编写

    Gruntfile由以下几部分构成: "wrapper" 函数 项目与任务,目标配置 加载grunt插件和任务 自定义任务 1.wrapper函数(包装函数) 每一个 Gruntf ...

  2. Grunt入门学习之(1) -- 环境安装

    Grunt入门学习(1) - 环境安装 这周根据项目需要,在项目的基础上分模块开发了一个小的项目板块,但是在规范组织每个模块的代码和其依赖性时比较麻烦,需要一个项目板块的构建工具.各个模块都包括其对应 ...

  3. grunt 入门学习

    前端工作流,Grunt上手指南 Posted@2013-04-20 7:15 a.m. CategoriesGrunt ,  javascript 我想先花点时间回忆一下作为一个前端需要做的工作(Lo ...

  4. cocos2d-x入门学习笔记,主要介绍cocos2d-x的基本结构,并且介绍引擎自带的示例

    cocos2d-x 3.0 制作横版格斗游戏 http://philon.cn/post/cocos2d-x-3.0-zhi-zuo-heng-ban-ge-dou-you-xi http://blo ...

  5. 【原创】SpringBoot & SpringCloud 快速入门学习笔记(完整示例)

    [原创]SpringBoot & SpringCloud 快速入门学习笔记(完整示例) 1月前在系统的学习SpringBoot和SpringCloud,同时整理了快速入门示例,方便能针对每个知 ...

  6. 自动化构建工具grunt的学习

    关于grunt的一些记录,记的比较乱... 0.删除node_modules文件夹 命令行: npm install rimraf -g //先运行 rimraf node_modules //然后运 ...

  7. Retrofit 入门学习

    Retrofit 入门学习官方RetrofitAPI 官方的一个例子 public interface GitHubService { @GET("users/{user}/repos&qu ...

  8. opengl入门学习

    OpenGL入门学习 说起编程作图,大概还有很多人想起TC的#include <graphics.h>吧? 但是各位是否想过,那些画面绚丽的PC游戏是如何编写出来的?就靠TC那可怜的640 ...

  9. Scala入门学习笔记三--数组使用

    前言 本篇主要讲Scala的Array.BufferArray.List,更多教程请参考:Scala教程 本篇知识点概括 若长度固定则使用Array,若长度可能有 变化则使用ArrayBuffer 提 ...

随机推荐

  1. 为什么要重写hashcode方法和equals方法

    我们可能经常听到说重写equals方法必须重写hashcode方法,这是为什么呢?java中所有的类都是Object的子类,直接上object源码 /* * Copyright (c) 1994, 2 ...

  2. JAVA数据结构--Array数组实现

    所谓数组,是有序的元素序列. [1]  若将有限个类型相同的变量的集合命名,那么这个名称为数组名.组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量.用于区分数组的各个元素的数字编 ...

  3. [JZOJ6075]【GDOI2019模拟2019.3.20】桥【DP】【线段树】

    Description N,M<=100000,S,T<=1e9 Solution 首先可以感受一下,我们把街道看成一行,那么只有给出的2n个点的纵坐标是有用的,于是我们可以将坐标离散化至 ...

  4. 5 个 iOS 和 Android 最佳的开源自动化工具[转]

    自动化测试时下在产品测试上有着非常重要的作用.实现测试自动化有多种积极的方式,包括最大限度地减少测试执行时间:在关键的发布阶段,用更少的时间确保更大的覆盖范围:在产品开发阶段,可靠又重复性地运行以确保 ...

  5. 什么是WCF(转)

    什么是WCF(Windows Communication Foundation(WCF)) 大家可以百度一下了解什么是WCF.当然有些人看到密密麻麻的黑框白字就懒的读.即使读了 可能也没明白确切的含义 ...

  6. hibernate关联关系的crud2

    hibernate关联关系的CRUD操作,解释都在注释里了,讲了fetchType.cascade. User类: package com.oracle.hibernate; import javax ...

  7. JWT的介绍解析

    JWT的介绍解析 一.什么是JWT?了解JWT,认知JWT 首先jwt其实是三个英语单词JSON Web Token的缩写.通过全名你可能就有一个基本的认知了.token一般都是用来认证的,比如我们系 ...

  8. SSM上传EXCLE到数据库 和 从数据库导出为EXCLE

    SSM上传EXCLE到数据库 和 从数据库导出为EXCLE package com.ABC.controller; import java.io.BufferedInputStream; import ...

  9. ECharts概念学习系列之ECharts官网教程之在 webpack 中使用 ECharts(图文详解)

    不多说,直接上干货! 官网 http://echarts.baidu.com/tutorial.html#%E5%9C%A8%20webpack%20%E4%B8%AD%E4%BD%BF%E7%94% ...

  10. JVM虚拟机指令

    参考及转载: (1)https://blog.csdn.net/qq_33301113/article/details/73717855 (2)https://blog.csdn.net/wangxf ...