webpack提升打包速度,减小体积方法之动态链表库dllPlugin,externals配置

vue开发过程中保存一次就编译一次,如果能够减少编译时间,哪怕是一丁点也能节省不少时间,开发过程中自己写的源文件会频繁变动,而一些库文件我们是很少变动的,如果把这些库文件提取出来就能减小打包体积,加快编译速度。

方法一 externals

1、为什么要配置externals
*官方解释

 webpack 中的 externals 配置提供了不从 bundle 中引用依赖的方式。解决的是,所创建的 bundle 依赖于那些存在于用户环境(consumer environment)中的依赖。

意思就是如果引用了一个库但是又不想让webpack打包(减少打包时间)并且不影响我们在程序中以cmd、amd或者window/global全局等方式进行使用(一般都是以import方式使用),那就可以通过配置externals实现。

这样做的目的就是将不怎么需要更新的第三方库脱离webpack打包,不被打包入bundle中,从而减少打包时间,但又不影响第三方库的运用。

2、externals支持模块上下文的方式

global - 外部 library 能够作为全局变量使用。用户可以通过在 script 标签中引入来实现。这是 externals 的默认设置。

commonjs - 用户(consumer)应用程序可能使用 CommonJS 模块系统,因此外部 library 应该使用 CommonJS 模块系统,并且应该是一个 CommonJS 模块。

commonjs2 - 类似上面几行,但导出的是 module.exports.default。

amd - 类似上面几行,但使用 AMD 模块系统。

3、怎么运用externals(@vue/cli 4.5.13为例)

例如:在index.hhtml中引入cdn资源query

<script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js"></script>

vue.config.js配置如下:
说明:关于externals的配置,不同版本的配置略有不同,请根据自己的项目略作变更

module.exports = {
     chainWebpack: (config) => {
         config.set('externals', {
                 jquery: 'jQuery',
                 })
         },
}

这样的话在应用程序中依旧可以以import的方式(还支持其他方式)引用:

import $ from 'jquery';

这样不仅之前对第三方库的用法方式不变,还把第三方库剥离出webpack的打包中,从而加速webpack的打包速度。

4、打包结果对比

方法二-dll动态链表库

DllPlugin 结合 DllRefrencePlugin 插件的运用,对将要产出的bundle文件进行拆解打包,可以很彻底地加快webpack的打包速度,从而在开发过程中极大地缩减构建时间。

以下主要讲述在 @vue/cli 4.5.13 中利用 DllPlugin 来进行预编译。

1、安装相关插件

npm install add-asset-html-webpack-plugin --save -dev

2、写dll配置文件

3、生成dll命令

   在 package.json 中加入如下命令

"scripts": { 
       "dll": "rm -rf dll/*;node ./node_modules/webpack/bin/webpack.js --config config/webpack.config.dll.js"
 }

控制台运行

npm run dll

结果

npm run build命令发现打包后的bundle文件依然存在jquery.

4、忽略已编译文件

为了节约编译时间,需要告诉webpack哪些插件已经编译过了,减少webpack的编译时间,在项目根目录下找到 vue.config.js ( 没有则新建 ),配置如下:

结果对比:

使用 DllPlugin 和 DllRefrencePlugin 进行构建,可以缩减50%~70%的构建时间。

dist文件下多了一个dll.js文件

打包结果对比:时间缩短明显,

5、index.html 中加载生成的 dll 文件

经过上面的配置,公共库提取出来了,编译速度快了,但如果不引用生成的 dll 文件,网页是不能正常工作的。打开 public/index.html,插入 script 标签。

<script src="../dll/vendor/vender.5a12daf.dll.js"></scrip

到此公用库提取完成,但总觉得最后一部手工插入 script 不太优雅,下面介绍下如何自动引入生成的 dll 文件。

打开 vue.config.js 在 configureWebpack plugins 节点下,配置 add-asset-html-webpack-plugin

引入成功查看打包后的dist文件结果如下:

6、补充DllPlugin作用示意图:

7、dome实现中遇到的问题

之前在公司项目中已经应用,公司项目用的是vue/cli2.0,对应的html-webpack-plugin插件对应的版本也比较低。后来在自己写dome的时候自己电脑安装的脚手架版本也相对比较低,但是安装html-webpack-plugin版本比较高导致出现一些问题,比如说生成的dll没见找不到等等,最后也是把插件的版本进行了降级,所以开发应用中注意版本之间的匹配。

8、参考文档

https://www.jb51.net/article/155939.htm
https://www.cnblogs.com/lifefriend/p/10479341.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,905评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,140评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,791评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,483评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,476评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,516评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,905评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,560评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,778评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,557评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,635评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,338评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,925评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,898评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,142评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,818评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,347评论 2 342

推荐阅读更多精彩内容