grunt使用小记之uglify:最全的uglify使用DEMO

grunt-contrib-uglify

uglify是一个文件压缩插件,项目地址:https://github.com/gruntjs/grunt-contrib-uglify

本文将以一个DEMO来展示如何使用uglify插件。

DEMO环境

package.json:

{"name": "grunt-demo","version": "0.1.0","devDependencies": {"grunt": "~0.4.2","grunt-contrib-jshint": "~0.6.0","grunt-contrib-nodeunit": "~0.2.0","grunt-contrib-uglify": "~0.2.2"}
}

DEMO文件结构:

 

其中js文件夹就是用来测试的,Gruntfile.js稍后介绍,其中a.js内容如下:

(function() {//output hello gruntvar helloGrunt = "Hello Grunt!(From a.js)";console.log(helloGrunt);
})();

b.js内容如下:

(function() {//output hello worldvar helloWorld = "Hello World!(From b.js)";console.log(helloWorld);
})();

下面我们来配置四个任务:

  • 压缩a.js,不混淆变量名,保留注释,添加banner和footer
  • 压缩b.js,输出压缩信息
  • 按原文件结构压缩js文件夹内所有JS文件
  • 合并压缩a.js和b.js

Gruntfile.js

现在直接通过Gruntfile.js来看看这四个任务的配置:

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
            },builda: {//任务一:压缩a.js,不混淆变量名,保留注释,添加banner和footer
                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']}},buildb:{//任务二:压缩b.js,输出压缩信息
                options: {report: "min"//输出压缩率,可选的值有 false(不输出信息),gzip
                },files: {'output/js/b.min.js': ['js/main/b.js']}},buildall: {//任务三:按原文件结构压缩js文件夹内所有JS文件
                files: [{expand:true,cwd:'js',//js目录下src:'**/*.js',//所有js文件dest: 'output/js'//输出到此目录下
                }]},release: {//任务四:合并压缩a.js和b.js
                files: {'output/js/index.min.js': ['js/a.js', 'js/main/b.js']}}}});// 加载提供"uglify"任务的插件grunt.loadNpmTasks('grunt-contrib-uglify');// 默认任务grunt.registerTask('default', ['uglify:release']);grunt.registerTask('mina', ['uglify:builda']);grunt.registerTask('minb', ['uglify:buildb']);grunt.registerTask('minall', ['uglify:buildall']);
}

通过上面的代码,我们很容易就可以看到上面四个任务的配置方式。

运行结果

任务一:压缩a.js,不混淆变量名,保留注释,添加banner和footer

运行 grunt mina 命令,生成的a.min.js如下:

/*! grunt-demo 2013-11-29 */
!function(){//output hello grunt
var helloGrunt="Hello Grunt!(From a.js)";console.log(helloGrunt)}();
/*! grunt-demo 最后修改于: 2013-11-29 */

跟我们的目标一致。

任务二:压缩b.js,输出压缩信息

运行 grunt minb 命令,生成的b.min.js如下:

/*! grunt-demo 2013-11-29 */
!function(){var a="Hello World!(From b.js)";console.log(a)}();

命令执行情况:

我们可以看到输出了压缩信息

任务三:按原文件结构压缩js文件夹内所有JS文件

运行 grunt minall 命令,生成目录结构如下:

其中a.min.js和b.min.js是任务一和任务二生成的,压缩后的output/js/a.js内容如下:

/*! grunt-demo 2013-11-29 */
!function(){var a="Hello Grunt!(From a.js)";console.log(a)}();

output/js/main/b.js内容如下:

/*! grunt-demo 2013-11-29 */
!function(){var a="Hello World!(From b.js)";console.log(a)}();

任务四:合并压缩a.js和b.js

运行 grunt命令,生成的output/index.min.js内容如下:

/*! grunt-demo 2013-11-29 */
!function(){var a="Hello Grunt!(From a.js)";console.log(a)}(),function(){var a="Hello World!(From b.js)";console.log(a)}();

 

至此,本节uglify插件的介绍就结束了,对本文或使用过程中有任何问题,欢迎留言讨论。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/547166.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

后台设计中容易被忽略的坑

1.数据关联性删除判断 示例&#xff1a;比如后台发布了一个待抢购的订单&#xff0c;app已经把此单抢购&#xff0c;因为后台没有及时刷新状态&#xff0c;所有如果要删除或下架此笔订单&#xff0c;必须先要验证此订单的状态是否为已经抢购&#xff1b; 2.数据重复录入问题 示…

人生该如何抉择

记得2012年初的时候受公司同事的讲解&#xff0c;我从一个对代码一无所知&#xff0c;了解到了计算机的数据类型、数组在内存中的存储&#xff0c;进而想走进程序员的行业&#xff0c;博客上认识的一个前辈告诉我了一个方向&#xff0c;前辈告诉我&#xff1a;“我建议你学java…

Android优秀参考APP源码

1 仿网易云音乐客户端 仿网易云音乐安卓版客户端&#xff0c;一个月内仍然有更新&#xff0c;接近2000star&#xff0c;相信是一款非常棒的音乐客户端。 涉及技术&#xff1a; Timber Fresco MediaPlayerProxy Android-ObservableScrollView retrofit ImitateNetEasyCloud…

聊聊excel生成图片的几种方式

目录 I&#xff1a;需求。 II&#xff1a;实现思路。 III&#xff1a;实现方式。 IV:优缺点分析。 V&#xff1a;结论。 VI&#xff1a;wps安装与配置。 正文 1.需求&#xff1a;把excel生成等比的图片。 2.实现思路&#xff1a;因为excel不能直接生成图片&#xff0c;所以需…

分类算法之贝叶斯(Bayes)分类器

摘要&#xff1a;旁听了清华大学王建勇老师的 数据挖掘&#xff1a;理论与算法 的课,讲的还是挺细的,好记性不如烂笔头,在此记录自己的学习内容,方便以后复习。 一&#xff1a;贝叶斯分类器简介 1&#xff09;贝叶斯分类器是一种基于统计的分类器,它根据给定样本属于某一个具体…

Ios生产证书申请(含推送证书)

一、Mac机上生成请求文件。 Mac机上点击证书助手 > 从证书颁发机构请求证书 > 得到CertificateSigningRequest.certSigningRequest请求文件&#xff08;此请求证书建议一直保存&#xff0c;因为根证书的生成需要使用此请求文件&#xff0c;根证书多个app可以使用一个&am…

优秀小程序demo 源码

1.Thor UI组件库https://github.com/dingyong0214/ThorUI 2.Booker图书共享借阅小程序开源https://github.com/shiheme/wx-bookerhttps://gitee.com/week7day/wx-booker 优惠券羊毛平台前端&#xff1a;https://github.com/leixiaokou/waimai-uniapp 优惠券羊毛平台后端&#…

算法:阶乘的五种算法

背景 周末温习了一下递归相关的一些概念&#xff0c;本文先给出阶乘的五种算法。 第一种实现&#xff1a;递归 1 private static long RecursiveFac(long n)2 {3 if (n 0)4 {5 return 1;6 }7 …

TortoiseGIT创建及合并分支

一、创建分支 项目右键 > TortoiseGit(T) > 创建分支&#xff0c;然后右键切换到刚刚创建的分支&#xff0c;新增/修改一个文件&#xff0c;提交分支到远端服务器&#xff0c;推送成功之后分支就创建好了。 二、合并分支 分支开发的代码先推送到远端&#xff0c;切换本…

如何画出企业系统架构图

该技术架构图是本人根据多年企业技术架构经验而制定&#xff0c;是企业技术的总架构图&#xff0c;希望对CTO们有所借鉴。 简单说明&#xff1a; 1.中间件基础运行环境是经过统一规划的以WebLogic、JBOSS为主的集群环境 2.企业集成平台是以基础业…

ashx中Response.ContentType的常用类型

ashx中Response.ContentType的常用类型&#xff1a; text/plaintext/htmltext/xmlapplication/jsonimage/GIFapplication/x-cdf

go 语言链接服务器上的mysql数据库

2019独角兽企业重金招聘Python工程师标准>>> 在网上找了一大堆例子&#xff0c;最后简化一下把&#xff0c;一下会从安装mysql开始&#xff0c;与大家分享一下如何用go链接服务器上的mysql 我用的是ubuntu系统 1&#xff0c;安装mysql&#xff1a;sudo apt-get in…

Nginx、LVS、HAProxy 的区别和优缺点

Nginx、LVS、HAProxy 是目前使用最广泛的三种负载均衡软件&#xff0c;本人都在多个项目中实施过&#xff0c;通常会结合Keepalive做健康检查&#xff0c;实现故障转移的高可用功能。 1&#xff09;在四层&#xff08;tcp&#xff09;实现负载均衡的软件&#xff1a; lvs------…

mssql 字增自段怎样重置(重新自增)|清空表已有数据

方法1 -- 清空已有数据&#xff0c;并且将自增自段恢复从1开始计数 truncate table 表名 方法2 -- 不清空已有数据&#xff0c;但将自增自段恢复从1开始计数 dbcc checkident(表名,RESEED,0) 让SQL自动增长的ID号从一个新的位置开始在查询分析器中执行后,该表自动增长列从1开始…

Android 基本测试工具的使用

Android 基本测试工具的使用和无线学习介绍1&#xff0c;日志查看工具1&#xff09;DDMSAndroid测试中&#xff0c;使用最多的日志查看工具就是DDMS了。ddms可以从两个地方打开&#xff0c;1&#xff0c;Eclipse的的ddms插件&#xff08;属于Eclipse 的SDK插件&#xff09;&…

服务端接口中的那些坑

TOP1&#xff1a;版本意识与兼容性问题。 对于一个好的程序员来说&#xff0c;思考的时间>写代码的时间&#xff0c;如果思路不对写的代码越多&#xff0c;错的也越多&#xff0c;任何时候思考是保证高效工作最省事的武器。 对于接口开发&#xff0c;不同于bs项目&#xff…

JS逆向学习笔记

JS逆向学习笔记 寻找深圳爬虫工作&#xff0c;微信:cjh-18888 文章目录 JS逆向学习笔记 一. JS Hook 1. JS HOOK 原理和作用 原理&#xff1a;替换原来的方法. (好像写了句废话)作用&#xff1a; 可以去Hook一些内置的函数, 例如Debugger, setInterval,JSON.stringify等等2.JS…

bfs+优先队列(hdu1242)

题目&#xff1a;http://acm.hdu.edu.cn/showproblem.php?pid1242这题目就是个大坑&#xff0c;先说下思路就是在遇到‘x’时要多停留1步&#xff0c;另外就是要用到优先队列&#xff0c;要从小到大排列&#xff0c;另外就是普通的bfs了 但是要注意题里的each of Angels frien…

vscode使用汇总——常用插件、常用配置、常用快捷键

一、代码提示快捷键设置&#xff1a;&#xff08;keybindings.json&#xff09; [{"key": "ctrlj","command": "-workbench.action.togglePanel"},{"key": "ctrlj","command": "editor.action.tri…

HDFS使用JavaAPI操作上传特定副本到datanode

一、首先自然是导包 $HADOOP_HOME/share/hadoop/common/*.jar $HADOOP_HOME/share/hadoop/common/lib/*.jar $HADOOP_HOME/share/hadoop/hdfs/*.jar $HADOOP_HOME/share/hadoop/hdfs/lib/*.jar 二、代码如下 package com.stu.hdfs; /*** * author ysw28* HDFS的API操…