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. Android中的倒计时实现

    一.android.os包下提供了倒计时的抽象工具类: public abstract class CountDownTimer { /** * Millis since epoch when ala ...

  2. 统一修改 UINavigationBar backItem

    { UINavigationBar * navigationBar = [UINavigationBar appearance]; //返回按钮的箭头颜色 [navigationBar setTint ...

  3. Tokyo Tyrant(TTServer)系列(六)-数据丢失谁的错

    ,false,1,100);$mem->addServer ("127.9.9.1",1978,false,1,100);$start=microtime(true);for ...

  4. DDR3内存详解,存储器结构+时序+初始化过程

    DDR3内存详解,存储器结构+时序+初始化过程 标签: DDR3存储器博客 2017-06-17 16:10 1943人阅读 评论(1) 收藏 举报  分类: 硬件开发基础(2)  转自:http:/ ...

  5. bootstrip可视化布局

    http://www.w3cschool.cc/try/bootstrap/layoutit/

  6. HashMap 内部原理

    HashMap 内部实现 通过名字便可知道的是,HashMap 的原理就是散列.HashMap内部维护一个 Buckets 数组.每一个 Bucket 封装为一个 Entry<K, V> ...

  7. weex-iOS集成

    weex-iOS集成 weex只是刚刚起步,还存在一些bug,有些功能还有待完善和提高.但是其使用起来还是可以节省些时间. 这里我们说说如何把weex集成到我们的iOS项目中 1. 下载weex源代码 ...

  8. LNMP笔记:php-fpm – 启动参数及重要配置详解

    约定几个目录/usr/local/php/sbin/php-fpm/usr/local/php/etc/php-fpm.conf/usr/local/php/etc/php.ini php-fpm的启 ...

  9. 在Linux系统上查看Apache服务器的错误日志

    错误日志和访问日志文件为系统管理员提供了有用的信息,比如,为 Web 服务器排障,保护系统不受各种各样的恶意活动侵犯,或者只是进行各种各样的分析以监控 HTTP 服务器.根据你 Web 服务器配置的不 ...

  10. windows下搭建ffmpeg+nginx+rtmp-module搭建实时视频环境

    下载ffmpeg的Windows静态版: https://ffmpeg.zeranoe.com/builds/win64/static/下载nginx-rtmp-windows版:https://gi ...