1. /**
  2. * Created by lee on 2014.07.02 002.
  3. */
  4. module.exports = function (grunt) {
  5.  
  6. // 项目配置
  7. grunt.initConfig({
  8. pkg: grunt.file.readJSON('package.json'),
  9. uglify: {
  10. options: {
  11. banner: '/*! <%= pkg.name %> <%= grunt.template.today("yyyy-mm-dd") %> */\n'//添加banner
  12. },
  13. //任务一:压缩a.js,不混淆变量名,保留注释,添加banner和footer
  14. builda: {
  15. options: {
  16. mangle: false, //不混淆变量名
  17. preserveComments: 'all', //不删除注释,还可以为 false(删除全部注释),some(保留@preserve @license @cc_on等注释)
  18. footer: '\n/*! <%= pkg.name %> 最后修改于: <%= grunt.template.today("yyyy-mm-dd") %> */'//添加footer
  19. },
  20. files: {
  21. 'output/js/a.min.js': ['js/a.js']
  22. }
  23. },
  24. //任务二:压缩b.js,输出压缩信息
  25. buildb: {
  26. options: {
  27. report: "min"//输出压缩率,可选的值有 false(不输出信息),gzip
  28. },
  29. files: {
  30. 'output/js/b.min.js': ['js/main/b.js']
  31. }
  32. },
  33. //任务三:按原文件结构压缩js文件夹内所有JS文件
  34. buildall: {
  35. files: [
  36. {
  37. expand: true,
  38. cwd: 'js',//js目录下
  39. src: '**/*.js',//所有js文件
  40. dest: 'output/js'//输出到此目录下
  41. }
  42. ]
  43. },
  44. //任务四:合并压缩a.js和b.js
  45. release: {
  46. files: {
  47. 'output/js/index.min.js': ['js/a.js', 'js/main/b.js']
  48. }
  49. }
  50. },
  51. filerev: {
  52. dist: {
  53. src: [
  54. '<%= pkg.dist %>/scripts/{,*/}*.js',
  55. '<%= pkg.dist %>/styles/{,*/}*.css',
  56. '<%= pkg.dist %>/images/{,*/}*.{png,jpg,jpeg,gif,webp,svg}',
  57. '<%= pkg.dist %>/styles/fonts/*'
  58. ]
  59. }
  60. },
  61. copy: {
  62. dist: {
  63. files: [
  64. {
  65. expand: true,
  66. dot: true,
  67. cwd: '<%= pkg.app %>',
  68. dest: '<%= pkg.dist %>',
  69. src: [
  70. '*.{ico,png,txt}',
  71. '.htaccess',
  72. '*.html',
  73. 'views/{,*/}*.html',
  74. 'images/{,*/}*.{webp}',
  75. 'fonts/*'
  76. ]
  77. }
  78. ]
  79. },
  80. styles: {
  81. expand: true,
  82. cwd: '<%= pkg.app %>/styles',
  83. dest: '<%= pkg.dist %>/styles',
  84. src: '{,*/}*.css'
  85. },
  86. script: {
  87. expand: true,
  88. cwd: '<%= pkg.app %>/scripts',
  89. dest: '<%= pkg.dist %>/scripts',
  90. src: '{,*/}*.js'
  91. }
  92. },
  93. useminPrepare: {
  94. html: '<%= pkg.app %>/index.html',
  95. options: {
  96. dest: '<%= pkg.dist %>',
  97. flow: {
  98. html: {
  99. steps: {
  100. js: ['concat', 'uglifyjs']
  101. },
  102. post: {}
  103. }
  104. }
  105. }
  106. },
  107.  
  108. // Performs rewrites based on filerev and the useminPrepare configuration
  109. usemin: {
  110. html: ['<%= pkg.dist %>/{,*/}*.html'],
  111. css: ['<%= pkg.dist %>/styles/{,*/}*.css'],
  112. options: {
  113. assetsDirs: ['<%= pkg.dist %>','<%= pkg.dist %>/images']
  114. }
  115. }
  116. });
  117.  
  118. // 加载提供任务的插件
  119. grunt.loadNpmTasks('grunt-contrib-uglify');
  120. grunt.loadNpmTasks('grunt-filerev');
  121. grunt.loadNpmTasks('grunt-usemin');
  122.  
  123. // 默认任务
  124. grunt.registerTask('default', ['uglify:release']);
  125. grunt.registerTask('mina', ['uglify:builda']);
  126. grunt.registerTask('minb', ['uglify:buildb']);
  127. grunt.registerTask('minall', ['uglify:buildall']);
  128. grunt.registerTask('build', ['uglify:buildall']);
  129. }

这里主要使用的是  grunt-contrib-uglify  使用了文件压缩和文件合并;

  1. pkg: grunt.file.readJSON('package.json'),

读取packages.json 文件里面的信息.

配置任务,使用uglify在里面配置任务 如上文件的 builda,buildb,buildall;

对于每个任务可配置的: 详细阅读 github uglify  doc

  1. demotask:{
  2. options: {
                report: "min",//输出压缩率,可选的值有 false(不输出信息),gzip
  3. mangle: false, //是否混淆变量名 默认false 添加 except: ['jQuery', 'Backbone'] 例外 ;不要混淆替换jQuery 和Backbone
  4. //对压缩方式控制 去掉 console.* 方法
  5. compress: {
  6. drop_console: true
  7. },
  8. preserveComments: 'all', //不删除注释,还可以为 false(删除全部注释),some(保留@preserve @license @cc_on等注释)
  9. footer:'\n/*! <%= pkg.name %> 最后修改于: <%= grunt.template.today("yyyy-mm-dd") %> */'//添加footer
  10. },
  11. files: [{
  12. expand:true,
  13. cwd:'js',//js目录下
  14. src:'**/*.js',//所有js文件
  15. dest: 'output/js'//输出到此目录下
  16. }]
  17. }

grunt 相关知识的更多相关文章

  1. PySpark SQL 相关知识介绍

    title: PySpark SQL 相关知识介绍 summary: 关键词:大数据 Hadoop Hive Pig Kafka Spark PySpark SQL 集群管理器 PostgreSQL ...

  2. 【Python五篇慢慢弹(5)】类的继承案例解析,python相关知识延伸

    类的继承案例解析,python相关知识延伸 作者:白宁超 2016年10月10日22:36:57 摘要:继<快速上手学python>一文之后,笔者又将python官方文档认真学习下.官方给 ...

  3. 移动WEB像素相关知识

    了解移动web像素的知识,主要是为了切图时心中有数.本文主要围绕一个问题:怎样根据设备厂商提供的屏幕尺寸和物理像素得到我们切图需要的逻辑像素?围绕这个问题以iphone5为例讲解涉及到的web像素相关 ...

  4. listener监听器的相关知识

    从别人的博客上我学习了listener的相关知识现在分享给大家 1.概念: 监听器就是一个实现特定接口的普通java程序,这个程序专门用于监听另一个java对象的方法调用或属性改变,当被监听对象发生上 ...

  5. UIViewController相关知识

    title: UIViewController 相关知识date: 2015-12-13 11:50categories: IOS tags: UIViewController 小小程序猿我的博客:h ...

  6. 【转】java NIO 相关知识

    原文地址:http://www.iteye.com/magazines/132-Java-NIO Java NIO(New IO)是从Java 1.4版本开始引入的一个新的IO API,可以替代标准的 ...

  7. NSString使用stringWithFormat拼接的相关知识

    NSString使用stringWithFormat拼接的相关知识 保留2位小数点 1 2 3 4 //.2代表小数点后面保留2位(2代表保留的数量) NSString *string = [NSSt ...

  8. iOS网络相关知识总结

    iOS网络相关知识总结 1.关于请求NSURLRequest? 我们经常讲的GET/POST/PUT等请求是指我们要向服务器发出的NSMutableURLRequest的类型; 我们可以设置Reque ...

  9. 电路相关知识--读<<继电器是如何成为CPU的>>

    电路相关知识–读<<继电器是如何成为CPU的>> */--> *///--> *///--> 电路相关知识–读<<继电器是如何成为CPU的> ...

随机推荐

  1. AssionShop开源B2C电子商务系统-概述(转载)

    今天是个特殊的日子,我在北京房租价格又上了一个新的台阶.在这个日子我准备开始建立一个开源项目,一个B2C行业的EC系统. 一.关于定位 我要做的不只是一个商城,应该说是一个能满足中小型企业建立电子商务 ...

  2. void *指针的加减运算

    1.手工写了一个程序验证void *指针加减运算移动几个字节: //本程序验证空类型指针减1移动几个字节 #include <stdio.h> int main(int argc, cha ...

  3. JavaNIO - AbstractInterruptibleChannel

    1. 描述 可异步关闭和中断的Channel. (1)实现InterruptibleChannel接口的Channel支持异步关闭:如果一个线程IO阻塞在一个可中断的channel,另一个线程可以执行 ...

  4. Secure Spring REST API using Basic Authentication

    What is Basic Authentication? Traditional authentication approaches like login pages or session iden ...

  5. 堆积木----vector防止内存超限

    蒜头君有 nn 块积木,编号分别为 11 到 nn.一开始,蒜头把第 ii 块积木放在位置 ii.蒜头君进行 mm 次操作,每次操作,蒜头把位置 bb 上的积木整体移动到位置 aa 上面.比如 11  ...

  6. Cannot change version of project facet Dynamic Web Module to 3.0 requires Java 1.6 or newer 解决方案

    Eclipse Maven 开发一个 jee 项目时,编译时遇到以下错误:Description Resource Path Location TypeDynamic Web Module 3.0 r ...

  7. plsql 查询到别的用户下面的表

    原因:勾选了"Allow multiple connections" 解决方法:打开"Tools"下面的"Perference",里面有个& ...

  8. 使用Data URL将图片嵌入到网页中

    早些时候,使用IE6浏览器,网页可以另存为mht,如果网页包含图片,那么图片也会存储到mht中. mht是微软提供的一种聚合HTML文档,它的本质其实是一个文本文件,那么我们也许会好奇,它的图片存储到 ...

  9. flutter 环境

    以下内容copy 于 https://www.cnblogs.com/lovelyYakir/p/7610396.html 原文请参考此 我只是做个记录 第一步:安装Git 你需要安装Git作为Flu ...

  10. 【Mac + Appium + Python3.6学习(五)】之常用的Android自动化测试API总结

    Github测试样例地址:https://github.com/appium-boneyard/sample-code/tree/master/sample-code/examples ①定位text ...