本博客不欢迎:各种镜像采集行为,请尊重知识产权法律法规。大家都是程序员,不要闹得不开心。

安装好grunt后,苏南大叔下一步的计划就是配置Gruntfile.js这个配置文件。在这个文件中,苏南大叔采用的是一种比较简单易懂的方案。处理的文件目标是:把很多个分散的js文件,合并为一个all.min.js文件。这样做的好处是:可以有效的减少浏览器的并发数,加快网页浏览。

安装grunt构建工具

grunt构建工具的安装,是有些奇怪的。需要全局安装grunt-cli,然后本地安装grunt。本篇文章里面,不做详细描述。可以参考下面这个链接:

安装grunt插件

要使用grunt压缩合并js文件,需要的插件是:grunt-contrib-uglify和grunt-contrib-concat。grunt-contrib-uglify是负责压缩处理js文件的,背后就是大名鼎鼎的uglifyjs。

grunt-contrib-concat是负责合并所有的.min.js文件的。

所以,需要的命令行是:npm install grunt-contrib-uglify grunt-contrib-concat --save

如何使用 grunt 插件压缩合并 js ?减少页面请求数的秘诀(图3-1)

设置Gruntfile.js配置压缩js方案

Gruntfile.js的外部套路部分,这里就不额外讲述了。下面仅仅给出Gruntfile.js的核心代码。module.exports = function (grunt) {

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

grunt.initConfig({

uglify: {

// 这里是uglify任务的配置信息

options: {

},

static_mappings: {

files: [{

src: 'js/jquery-2.1.4.min.js',

dest: 'build/jquery.min.js'

},{

src: 'lib/bootstrap-3.3.7/js/bootstrap.min.js',

dest: 'build/bootstrap.min.js'

},{

src: 'js/jquery.pjax.js',

dest: 'build/jquery.pjax.min.js'

}],

}

},

concat: {

js: {

src: ["build/*.js"],

dest: 'dest/all.min.js',

options :{

separator: ';',//分割符

stripBanners: true//去掉代码中的块注释

},

},

},

});

grunt.loadNpmTasks('grunt-contrib-uglify');

grunt.loadNpmTasks('grunt-contrib-concat');

grunt.registerTask('default', ['uglify', 'concat']);

}

上述文件配置好之后,在Gruntfile.js所在目录执行grunt命令即可完成js文件的合并与压缩。压缩后的.min.js文件位于build目录之中。而合并的all.min.js文件位于dest目录。

如何使用 grunt 插件压缩合并 js ?减少页面请求数的秘诀(图3-2)

可能存在的问题

all.min.js文件是生成了,但是并不代表着这事就万事大吉了。因为正常页面的原来分散的js之间是有先后依赖顺序的。而合并(concat)的过程里面,src设置为build/*.js。这样的话,就没有先后顺序的说法了。

所以,很有可能发生的情况就是:你删除了各个分散的js文件,换成all.min.js后,页面会报js错误,比如某某没有定义,某某没有某属性之类的。

设置合并js的顺序

定义合并js顺序的办法也很简单,就是:设置contact.[name].src数组,顺序写入各个要合并的js即可,就是说不用通配符*,而是顺序写入文件。比如:concat: {

js: {

options :{

separator: ';',//分割符

stripBanners: true//去掉代码中的块注释

},

src:["build/jquery.min.js",

"build/bootstrap.min.js",

"build/jquery.pjax.min.js" ],

dest: 'dest/all.min.js'

},

},

这个conact的配置就是说,把src所配置的build目录下面的.min.js文件,按顺序合并成dest/all.min.js文件。而build目录下面的.min.js文件,则是uglify这个任务里面,执行获得的。

Gruntfile.js配置文件描述

下面对本文涉及的Gruntfile.js进行一下总结。共涉及两个插件grunt-contrib-uglify和grunt-contrib-concat。两者使用grunt.loadNpmTasks()定义的。

uglify任务(去掉了grunt-contrib-字样),负责把每个单独的js压缩(混淆)成多个.min.js文件。

concat任务里面,可以定义多个合并任务。这里就定义了一个分支任务js。在这个分支任务里面,通过src数组,顺序定义了已经压缩好的.min.js文件,最终合并得到了all.min.js文件。

如何使用 grunt 插件压缩合并 js ?减少页面请求数的秘诀(图3-3)

使用方式

得到了最终的合并顺序可控的all.min.js文件后,就可以把页面内所有的js引用都删除掉,然后再只加载这个最终的all.min.js即可。

这个合并的得到的js,因为毕竟有js的路径变化。那么理论上来说,可能会发生附带资源的加载失败风险。所以,请记得测试后再使用。

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。

本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。

grunt 压缩 html,如何使用 grunt 插件压缩合并 js ?减少页面请求数的秘诀相关推荐

  1. 使用GRUNT压缩和合并js文件

    目标 Grunt是一个简单好用的js文件压缩和合并工具,当一个页面需要加载过个js文件时,合并多个js文件可以减少http请求次数,提高页面加载速度.另外,Grunt的uglify功能可以起到混淆和隐 ...

  2. Grunt的配置及使用(压缩合并js/css)

    Grunt的配置及使用(压缩合并js/css) 安装 前提是你已经安装了nodejs和npm. 你能够在 nodejs.org 下载安装包安装.也能够通过包管理器(比方在 Mac 上用 homebre ...

  3. webpack项目css插件压缩等步骤

    webpack项目css插件压缩等步骤 minicssextractplugin css插件防止闪屏 首先安装npm i mini-css-extract-plugin -S 要求webpack5 这 ...

  4. YUI Compressor插件压缩后war中的js/css文件未压缩的解决方法(被maven打包顶替了)

    YUI Compressor Maven插件可以压缩/合并js或css文件,经常用在Maven项目中,但最近发现在wabapp中执行了 mvn install 命令进行发布之后,终端中显示插件已经执行 ...

  5. 使用Egret插件压缩代码包体积,减少请求数量的实战教程

    在白鹭引擎发布了5.2.7版本中新增加了命令行,增加自动合图插件TextureMergerPlugin功能.今天,我们以一个EUI案例来展示自动合图插件的具体使用方法和注意事项. 此外,我们在本文还融 ...

  6. grunt入门讲解1:grunt的基本概念和使用

    Grunt和 Grunt 插件是通过 npm 安装并管理的,npm是 Node.js 的包管理器. Grunt 0.4.x 必须配合Node.js >= 0.8.0版本使用.老版本的 Node. ...

  7. 前端性能优化--合并压缩js,减少http请求次数

    在我之前写的性能优化中,推荐大家使用雪碧图,压缩图片大小是一个方面,还有一个比较重要的方面就是,将图片放到一起了,降低了http的请求次数.今天这里我主要介绍大家在网站发布的时候,可以利用一些在线的合 ...

  8. hadoop中MapReduce中压缩的使用及4种压缩格式的特征的比较

    在比较四中压缩方法之前,先来点干的,说一下在MapReduce的job中怎么使用压缩. MapReduce的压缩分为map端输出内容的压缩和reduce端输出的压缩,配置很简单,只要在作业的conf中 ...

  9. 压缩命令_Linux环境下文件压缩打包命令详解

    你好,我是goldsunC 让我们一起进步吧! 前言 我们知道,在面向对象的程序设计中,一切皆对象.而在Linux操作系统中,一切皆文件,因此我们总会跟文件打交道. Linux文件系统很庞大复杂,不过 ...

最新文章

  1. SpringSecurity权限表达式
  2. HTTP协议和几种常见的状态码
  3. 关于inet_ntop、inet_pton中的n和p分别代表的意义
  4. 2019年低延迟直播技术展望
  5. 学习 Message(3): 响应 WM_LBUTTONDOWN 消息
  6. 了解Spring Web初始化
  7. 【M1兼容】阿里云盘小白羊版 Mac版(支持满速)
  8. s8050三极管经典电路_电路板维修基本经验分享。
  9. HDU 1565 方格取数(简单状态压缩DP)
  10. 初一网络计算机基础知识,初一计算机基础知识复习题da.docx
  11. 高新技术企业认定中科技成果转化数量的认定
  12. php pdo mysql 超时_为 PDO 增加读写超时
  13. Python操作Excel表格(二)
  14. easyui treegrid php,jQuery中关于EasyUI的TreeGrid查询功能的实现
  15. 概率论 1 随机试验 样本空间 随机事件事件间的运算
  16. Codeforces Round #614 (Div. 1) C.Xenon's Attack on the Gangs(树形dp)
  17. 图的建立——邻接矩阵
  18. 【mysql】mysql利用mysqldump导出表结构或者表数据
  19. qps、tps、吞吐量
  20. 利用swagger组件测试excel下载,打开文件乱码。

热门文章

  1. MediaPlayer源码流程简要分析
  2. 入行数据分析要知道什么是标准计分离差
  3. item_search - 根据关键词获取拼多多商品列表
  4. 【FAQ】软件保护系统Themida常见问题集锦(二)—“Taggant信息”功能的用途是什么?
  5. 车站广播系统采用计算机,广播系统在轨道交通中的应用
  6. 前端开发常用案例(一)
  7. 团队成员梁飞专访:阿里巴巴分布式服务框架Dubbo
  8. 跨境电商——产品漂洋过海的底层逻辑
  9. linux 误删nginx.conf文件恢复
  10. 二进制数求反(C语言)