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

/**
* Created by Administrator on 2017/6/22.
*/
module.exports = function(grunt){
"use strict";
grunt.initConfig({
pkg: grunt.file.readJSON("package.json"), //将存储在package.json文件中的grunt 版本信息和各个插件的数据信息引入到grunt config中
copy: { //copy任务,把所有文件拷贝到功能代码目录下,即EngineeringCode目录
module_target: { //copy任务目标,任务名是固定的“任务名称”属性,目标名可以随意定,不重复就行
files: [{ //files特性,表示执行任务目标时,会自动新建固定名称的文件夹,比如scripts,style等
expand: true,
cwd: "SourceCode/", //所有src指定的匹配都将相对于此处指定的路径(即该路径是基础路径,但不包括此路径)
src: ['**/*'],
dest: "EngineeringCode/", //dest 生成的目标文件路径前缀,即重新生成的这些文件后放到什么位置。
filter: "isFile",
extDot: 'first'
}]
}
}, concat: { //将指定目录下的js文件拼接成一个js文件,CSS文件拼接成一个CSS文件
options: {
separator: ';',
stripBanners: true,
banner: '/*! hello - v1.2.3 - 2014-2-4 */'
},
dist: { //concat任务目标1,将EngineeringCode/VarMesSignMan下的所有js文件拼接成一个.min.js文件
//files:[{
// expand: true,
// cwd: "EngineeringCode/",
// src: ['**/*.js'],
// dest: "EngineeringCode/zipFile/all.js",
// //ext: ".min.js",
// //extDot: 'first'
//}]
src: "EngineeringCode/**/*.js", //将EngineeringCode目录下包括子文件夹下的所有css文件
dest: "EngineeringCode/zipFile/scripts/all.js" //合并到dest路径下名为all.js的文件
},
dist2: { //concat任务目标2,将EngineeringCode/VarMesSignMan下的所有css文件拼接成一个.min.css文件
src: "EngineeringCode/**/*.css", //EngineeringCode目录下包括子文件夹下的所有css文件
dest: "EngineeringCode/zipFile/style/all.css" //合并到dest路径下名为all.css 的文件
}
}, cssmin: { //cssmin任务,将指定目录下的css文件压缩成 .min.css文件
options: {
separator: ';',
stripBanners: true,
banner: '/*! hello - v1.2.3 - 2014-2-4 */'
},
my_target:{ //cssmin任务目标1,将EngineeringCode/VarMesSignMan下的所有css文件压缩成.min.css文件
files: [{
expand: true,
cwd: 'EngineeringCode/VarMesSignMan/style', //所有src指定的匹配都将相对于此处指定的路径(即该路径是基础路径,但不包括此路径)
src: '**/*.css',
dest: 'EngineeringCode/VarMesSignMan/style', //dest 生成的目标文件路径前缀,即重新生成的这些文件后放到什么位置。
ext: ".min.css", //ext 对于生成的dest路径中所有实际存在文件,均使用这个属性值替换扩展名。
extDot: 'first' //extDot 用于指定标记扩展名的英文点号的所在位置。可以赋值 'first' (扩展名从文件名中的第一个英文点号开始) 或 'last' (扩展名从最后一个英文点号开始),默认值为 'first'
}]
},
my_target2:{ //cssmin任务目标2,将EngineeringCode/BiInterface下的所有css文件压缩成.min.css文件
files: [{
expand: true,
cwd: 'EngineeringCode/BiInterface/style',
src: '**/*.css',
dest: 'EngineeringCode/BiInterface/style',
ext: ".min.css",
extDot: 'first'
}]
}
}, uglify: { //uglify任务,将指定目录下的js文件压缩成 .min.js文件
options: {
separator: ';',
stripBanners: true,
banner: '/*! hello - v1.2.3 - 2014-2-4 */'
},
my_target:{ //uglify任务目标1,将EngineeringCode/VarMesSignMan下的所有js文件压缩成.min.js文件
files: [{
expand: true,
cwd: 'EngineeringCode/VarMesSignMan/scripts',
src: '**/*.js',
dest: 'EngineeringCode/VarMesSignMan/scripts',
ext: ".min.js",
extDot: 'first'
}]
},
my_target2:{ //uglify任务目标2,将EngineeringCode/BiInterface下的所有js文件压缩成.min.js文件
files: [{
expand: true,
cwd: 'EngineeringCode/BiInterface/scripts',
src: '**/*.js',
dest: 'EngineeringCode/BiInterface/scripts',
ext: ".min.js",
extDot: 'first'
}]
}
},
clean: { //clean任务,将指定目录下的指定格式文件删除
js: { //clean任务目标1,将EngineeringCode目录下的所有非 .min.js文件删除
src: ['EngineeringCode/**/*.js','!EngineeringCode/**/*min.js','!EngineeringCode/**/*all.js']
},
css: { //clean任务目标2,将EngineeringCode目录下的所有非 .min.css文件删除
src: ['EngineeringCode/**/*.css','!EngineeringCode/**/*min.css','!EngineeringCode/**/*all.css']
}
}
}); grunt.loadNpmTasks("grunt-contrib-copy"); //加载能够提供"copy"任务的插件。加载其他插件和此方法相同
grunt.loadNpmTasks("grunt-contrib-concat");
grunt.loadNpmTasks("grunt-contrib-cssmin");
grunt.loadNpmTasks("grunt-contrib-uglify"); //加载能够提供"uglify"任务的插件。加载其他插件和此方法相同
grunt.loadNpmTasks("grunt-contrib-watch");
grunt.loadNpmTasks("grunt-contrib-clean"); grunt.registerTask("default",["copy:module_target","concat","cssmin","uglify","clean"]); //通过定义 default 任务,可以让Grunt默认执行一个或多个任务。
};

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

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

@echo off
title 【文件压缩处理】
color 03f
echo minify javascript and css with grunt E:
cd E:\\Work_Test\\FrontEndCompression\\SourceCode
grunt echo Press any key to continue....
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. Web App、Hybrid App、 Native App

    1.特点: 1. 偏交互的Native,偏浏览的Web:交互指复杂操作,输入/选择什么的2. 已稳定的Native,试错中的Web:H5页面用来做低成本验证很好3. 访问硬件Native,信息展示We ...

  2. Java中的语法树结构

    1.JCTypeParameter class B<T extends CA&IA&IB> { ...} 截图如下: 接口继承了StatementTree接口,而实现类实现 ...

  3. vue引入bootstrap和fontawesome

    npm install jquery npm install bootstrap npm install popper.js. import $ from 'jquery' import 'boots ...

  4. InnoDB的后台线程(IO线程,master线程,锁监控线程,错误监控线程)和内存(缓冲池,重做日志缓冲池,额外内存池)

    InnoDB有多个内存块,你可以认为这些内存块组成了一个大的内存池,负责如下工作: 维护所有进程/线程需要访问的多个内部数据结构. 缓存磁盘上的数据,方便快速地读取,并且在对磁盘文件的数据进行修改之前 ...

  5. SharePoint如何创建能够继承站点左面导航(Left Navigation)的Web Part页面

    转自:http://social.msdn.microsoft.com/Forums/zh-CN/b069e6f8-e4d5-4bf3-93a1-4eecb55489d6/sharepointleft ...

  6. 设置主外键时 ORA-02298: 无法验证 - 未找到父项关键字 --NOVALIDATE;

    主要原因是: 在添加CONSTRAINT的时候,默认是需要VALIDATE表中的已有数据的. 你要插入的表A里,有外键连接到另一个表B的主键,你在表A的外键列插入的值,在表B的主键列找不到就不能插入. ...

  7. Java SPI

    一.什么是Java SPI? SPI的全名为Service Provider Interface.大多数开发人员可能不熟悉,因为这个是针对厂商或者插件的.在java.util.ServiceLoade ...

  8. mysql索引对单表查询的影响

    索引被用来快速找出在一个列上用一特定值的行.没有索引,MySQL不得不首先以第一条记录开始并然后读完整个表直到它找出相关的行.表越大,花费时间越多. 如果表对于查询的列有一个索引,MySQL能快速到达 ...

  9. IoC容器之Unity

    关于IoC.Unity见博友文章点击这里. 话不多说,上程序HelloUnity,程序采用VS2010,Unity2.1. 1.程序框架如下 2.类库HelloUnity.Objects,主要为实体类 ...

  10. n后问题

    Description 在n×n格的棋盘上放置彼此不受攻击的n个皇后.按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子.n后问题等价于在n×n格的棋盘上放置n个皇后,任何2个皇 ...