Webpack打包优化:使用外链与拆包模式

栏目: 编程语言 · 发布时间: 5年前

内容简介:这是一个基于 vue-cli 的管理后台项目,由于依赖较多,打包结果如下为什么 vendor 体积这么大?引用的库太多时,vendor的体积会很大,借助 Webpack 的分析工具,看了下各个依赖的体积分布

这是一个基于 vue-cli 的管理后台项目,由于依赖较多,打包结果如下

Webpack打包优化:使用外链与拆包模式

二、查找原因

为什么 vendor 体积这么大?

引用的库太多时,vendor的体积会很大,借助 Webpack 的分析工具,看了下各个依赖的体积分布

Webpack打包优化:使用外链与拆包模式

找到原因,是 Highcharts 和 Element-UI占了较大体积,导致性能减弱。

这两个库都提供了按需加载的功能,能有效减小体积,只是刚好这个管理后台项目依赖较多

那么有办法控制打包的体积超过一定值时,分成多个文件打包吗?

或者通过配置将部分库抽离出来,打包成另外的文件?

三、解决方法

(一)CDN 外链

先把 Highcharts 和 Lodash 通过外链引入

<script src="//cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.5/lodash.min.js" />
<script src="//cdnjs.cloudflare.com/ajax/libs/highcharts/6.0.7/highstock.js" />
<script src="//cdnjs.cloudflare.com/ajax/libs/highcharts/6.0.7/js/highcharts-more.js" />
<script src="//cdnjs.cloudflare.com/ajax/libs/highcharts/6.0.7/js/modules/treemap.js" />
复制代码

外链引入的资源就不能直接通过 import 来使用,但可以通过 Webpack 的 externals 特性来兼容

import _ from 'lodash'
import Highcharts from 'highcharts'

console.log([_, Highcharts])
复制代码

这样配置 Webpack 就知道这两个依赖是外链全局的,不需要打包

externals: {
  lodash: '_',
  highcharts: 'Highcharts'
}
复制代码

先看看去掉 Highcharts 和 Lodash 的效果

Webpack打包优化:使用外链与拆包模式

vendor 也避免打包了这两个库

Webpack打包优化:使用外链与拆包模式

这种方式适用于不常更新的第三方依赖,采用外链,Element-UI 由于常有新特性更新,需要保持最新版本,所以还是通过 npm 来管理

内网部署的问题

如若这个管理后台项目要部署到一个内网机器,访问不了外网,那要怎么解决呢?

(二)拆开 vendor

Webpack 默认是将依赖打包成一个文件,这样优点是减少资源请求数,但当依赖增多,体积增大,一个资源的加载速度就会减慢

所以尝试去拆包

new webpack.optimize.CommonsChunkPlugin({
  name: 'charts',
  chunks: ['vendor'],
  minChunks: module => module.resource.indexOf('highcharts') > -1
}),

new webpack.optimize.CommonsChunkPlugin({
  name: 'utils',
  chunks: ['vendor'],
  minChunks: module => module.resource.indexOf('lodash') > -1
}),

new webpack.optimize.CommonsChunkPlugin({
  name: 'ui',
  chunks: ['vendor'],
  minChunks: module => module.resource.indexOf('element-ui') > -1
})
复制代码

拆包后的打包结果

Webpack打包优化:使用外链与拆包模式

看看分析工具

Webpack打包优化:使用外链与拆包模式

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Introduction to Programming in Java

Introduction to Programming in Java

Robert Sedgewick、Kevin Wayne / Addison-Wesley / 2007-7-27 / USD 89.00

By emphasizing the application of computer programming not only in success stories in the software industry but also in familiar scenarios in physical and biological science, engineering, and appli......一起来看看 《Introduction to Programming in Java》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具