/**
* Created by lee on 2014.07.02 002.
*/
module.exports = function (grunt) { // 项目配置
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
uglify: {
options: {
banner: '/*! <%= pkg.name %> <%= grunt.template.today("yyyy-mm-dd") %> */\n'//添加banner
},
//任务一:压缩a.js,不混淆变量名,保留注释,添加banner和footer
builda: {
options: {
mangle: false, //不混淆变量名
preserveComments: 'all', //不删除注释,还可以为 false(删除全部注释),some(保留@preserve @license @cc_on等注释)
footer: '\n/*! <%= pkg.name %> 最后修改于: <%= grunt.template.today("yyyy-mm-dd") %> */'//添加footer
},
files: {
'output/js/a.min.js': ['js/a.js']
}
},
//任务二:压缩b.js,输出压缩信息
buildb: {
options: {
report: "min"//输出压缩率,可选的值有 false(不输出信息),gzip
},
files: {
'output/js/b.min.js': ['js/main/b.js']
}
},
//任务三:按原文件结构压缩js文件夹内所有JS文件
buildall: {
files: [
{
expand: true,
cwd: 'js',//js目录下
src: '**/*.js',//所有js文件
dest: 'output/js'//输出到此目录下
}
]
},
//任务四:合并压缩a.js和b.js
release: {
files: {
'output/js/index.min.js': ['js/a.js', 'js/main/b.js']
}
}
},
filerev: {
dist: {
src: [
'<%= pkg.dist %>/scripts/{,*/}*.js',
'<%= pkg.dist %>/styles/{,*/}*.css',
'<%= pkg.dist %>/images/{,*/}*.{png,jpg,jpeg,gif,webp,svg}',
'<%= pkg.dist %>/styles/fonts/*'
]
}
},
copy: {
dist: {
files: [
{
expand: true,
dot: true,
cwd: '<%= pkg.app %>',
dest: '<%= pkg.dist %>',
src: [
'*.{ico,png,txt}',
'.htaccess',
'*.html',
'views/{,*/}*.html',
'images/{,*/}*.{webp}',
'fonts/*'
]
}
]
},
styles: {
expand: true,
cwd: '<%= pkg.app %>/styles',
dest: '<%= pkg.dist %>/styles',
src: '{,*/}*.css'
},
script: {
expand: true,
cwd: '<%= pkg.app %>/scripts',
dest: '<%= pkg.dist %>/scripts',
src: '{,*/}*.js'
}
},
useminPrepare: {
html: '<%= pkg.app %>/index.html',
options: {
dest: '<%= pkg.dist %>',
flow: {
html: {
steps: {
js: ['concat', 'uglifyjs']
},
post: {}
}
}
}
}, // Performs rewrites based on filerev and the useminPrepare configuration
usemin: {
html: ['<%= pkg.dist %>/{,*/}*.html'],
css: ['<%= pkg.dist %>/styles/{,*/}*.css'],
options: {
assetsDirs: ['<%= pkg.dist %>','<%= pkg.dist %>/images']
}
}
}); // 加载提供任务的插件
grunt.loadNpmTasks('grunt-contrib-uglify');
grunt.loadNpmTasks('grunt-filerev');
grunt.loadNpmTasks('grunt-usemin'); // 默认任务
grunt.registerTask('default', ['uglify:release']);
grunt.registerTask('mina', ['uglify:builda']);
grunt.registerTask('minb', ['uglify:buildb']);
grunt.registerTask('minall', ['uglify:buildall']);
grunt.registerTask('build', ['uglify:buildall']);
}

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

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

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

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

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

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

最新文章

  1. PHP中生成json信息的方法
  2. SQL-一道特殊的字符串分解题目
  3. android 开发edittext获取焦点时hint消失
  4. spoj 8222 Substrings(后缀自动机+DP)
  5. C-二维数组,多维数组
  6. Keras Xception Multi loss 细粒度图像分类
  7. phpcms的验证码替换 及 phpcms实现全站搜索功能
  8. spring mvc 中自定义404页面在IE中无法显示favicon.ico问题的解决方法。
  9. jquery ajax中success与complete的执行顺序
  10. python3 time模块
  11. backref 用法
  12. 浅谈JavaScript 函数作用域当中的“提升”现象
  13. java 运行 .jar 文件乱码
  14. git纯净提交代码(只提交自己改过的文件)
  15. AC自动机练习
  16. 用数组指针遍历数组,FOR/FOREACH遍历数组
  17. Python开发【Django】:分页、Cookie和Session
  18. POJ 1637 Sightseeing tour(混合图欧拉回路+最大流)
  19. ubuntu 基础环境
  20. 《精通CSS》读书笔记(一)

热门文章

  1. js Array.prototype.join.call(arguments,&quot;,&quot;) 理解
  2. unity3d创建window
  3. SQL 查询结果为 XML
  4. OpenJudge百炼习题解答(C++)--题4074:积水量
  5. Java自带命令详解
  6. atitit. it软件项目管理---自己的员工,雇佣军、援军,混合的员工 杂牌 人员管理架构
  7. Apache: You don&#39;t have permission to access / on this server
  8. 由于没有发现潜在的递归导致MySQL链接数溢出:MySQLNonTransientConnectionException: Data source rejected establishment of connection, message from server: &quot;Too many connec
  9. (译)Getting Started——1.2.2 Desinging a User Interface(设计用户界面)
  10. SockIOPool