Webpack性能优化 DLL 用法详解


Posted in Javascript onAugust 10, 2017

前言

在用 Webpack 打包的时候,对于一些不经常更新的第三方库,比如 react,lodash,我们希望能和自己的代码分离开,Webpack 社区有两种方案

  • CommonsChunkPlugin
  • DLLPlugin

对于 CommonsChunkPlugin,webpack 每次打包实际还是需要去处理这些第三方库,只是打包完之后,能把第三方库和我们自己的代码分开。而DLLPlugin 则是能把第三方代码完全分离开,即每次只打包项目自身的代码。

用法

要使用 DLLPlugin,需要额外新建一个配置文件。所以对于用这种方式打包的项目,一般会有下面两个配置文件

  • webpack.config.js
  • webpack.dll.config.js

先来看下 webpack.dll.config.js

const webpack = require('webpack')
const library = '[name]_lib'
const path = require('path')

module.exports = {
 entry: {
 vendors: ['react', 'lodash']
 },

 output: {
 filename: '[name].dll.js',
 path: 'dist/',
 library
 },

 plugins: [
 new webpack.DllPlugin({
  path: path.join(__dirname, 'dist/[name]-manifest.json'),
  // This must match the output.library option above
  name: library
 }),
 ],
}

再改下 webpack.config.js 文件

const webpack = require('webpack')

module.exports = {
 entry: {
 app: './src/index'
 },
 output: {
 filename: 'app.bundle.js',
 path: 'dist/',
 },
 plugins: [
 new webpack.DllReferencePlugin({
  context: __dirname,
  manifest: require('./dist/vendors-manifest.json')
 })
 ]
}

manifest: require('./dist/vendors-manifest.json') 这里的路径要和 webpack.dll.config.js 里面的对应。

然后运行

$ webpack --config webpack.dll.config.js
$ webpack --config webpack.config.js

然后你的 html 文件像下面这样引用

<script src="/dist/vendors.dll.js"></script>
<script src="/dist/app.bundle.js"></script>

DLL Link Plugin

上面的用法也存在一些不方便的地方,比如在 webpack.config.js 中要明确指出对应的 manifest.json 文件。还有当 DLL 需要更新的时候,比如 react 升级了,或者加入新的第三方库,都需要手动像下面这样编译一次。

$ webpack --config webpack.dll.config.js

因为上面这些问题,所以基于官方的 DllReferencePlugin,我写了一个打包的插件,Dll Link Plugin。

使用这个插件,只需要对 webpack.config.js 作下小小的改动

const webpack = require('webpack')
const DllLinkPlugin = require('dll-link-webpack-plugin')

module.exports = {
 // ...
 plugins: [
 new DllLinkPlugin({
  config: require('webpack.dll.config.js')
 })
 ]
}

直接替换掉 DllReferencePlugin,然后传入对应的 DLL 配置文件就可以了。每次打包的时候,只需要运行

$ webpack --config webpack.config.js

上面的命令便会自动生成对应的 vendors 文件,需要更新的时候,也会自动更新。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Javascript 学习笔记 错误处理
Jul 30 Javascript
Javascript 获取链接(url)参数的方法[正则与截取字符串]
Feb 09 Javascript
Jquery写一个鼠标拖动效果实现原理与代码
Dec 24 Javascript
JS/jQuery实现默认显示部分文字点击按钮显示全部内容
May 13 Javascript
基于javascript html5实现3D翻书特效
Mar 14 Javascript
又一款js时钟!transform实现时钟效果
Aug 15 Javascript
vue项目中将element-ui table表格写成组件的实现代码
Jun 12 Javascript
帮你彻底搞懂JS中的prototype、__proto__与constructor(图解)
Aug 23 Javascript
JS数组方法concat()用法实例分析
Jan 18 Javascript
微信小程序scroll-view隐藏滚动条的方法详解
Mar 25 Javascript
详解在Vue.js编写更好的v-for循环的6种技巧
Apr 14 Javascript
node运行js获得输出的三种方式示例详解
Jul 02 Javascript
详解React Native网络请求fetch简单封装
Aug 10 #Javascript
jQuery Ajax 实现分页 kkpager插件实例代码
Aug 10 #jQuery
JS对象与JSON互转换、New Function()、 forEach()、DOM事件流等js开发基础小结
Aug 10 #Javascript
jquery.uploadView 实现图片预览上传功能
Aug 10 #jQuery
express框架实现基于Websocket建立的简易聊天室
Aug 10 #Javascript
bootstrap table服务端实现分页效果
Aug 10 #Javascript
AngularJs+Bootstrap实现漂亮的计算器
Aug 10 #Javascript
You might like
整理php防注入和XSS攻击通用过滤
2015/09/13 PHP
CodeIgniter配置之config.php用法实例分析
2016/01/19 PHP
PHP+Ajax异步带进度条上传文件实例
2016/11/01 PHP
JavaScript入门教程(9) Document文档对象
2009/01/31 Javascript
javascript Excel操作知识点
2009/04/24 Javascript
JQUERY 浏览器判断实现函数
2009/08/20 Javascript
JQuery 图片延迟加载并等比缩放插件
2009/11/09 Javascript
jquery Mobile入门—外部链接切换示例代码
2013/01/08 Javascript
JS实现随机数生成算法示例代码
2013/08/08 Javascript
详解AngularJS的通信机制
2015/06/18 Javascript
JS实现带圆弧背景渐变效果的导航菜单代码
2015/10/13 Javascript
基于javascript实现listbox左右移动
2016/01/29 Javascript
jQuery使用zTree插件实现树形菜单和异步加载
2016/02/25 Javascript
浅析angularJS中的ui-router和ng-grid模块
2016/05/20 Javascript
浅谈如何实现easyui的datebox格式化
2016/06/12 Javascript
Vue.js动态组件解析
2016/09/09 Javascript
详解Angular.js数据绑定时自动转义html标签及内容
2017/03/30 Javascript
nodejs多版本管理总结
2018/04/03 NodeJs
移动端 Vue+Vant 的Uploader 实现上传、压缩、旋转图片功能
2019/06/10 Javascript
JS数组splice操作实例分析
2019/10/12 Javascript
[54:41]2018DOTA2亚洲邀请赛3月30日 小组赛B组 VGJ.T VS paiN
2018/03/31 DOTA
Python实现简单截取中文字符串的方法
2015/06/15 Python
Python实现完整的事务操作示例
2017/06/20 Python
python迭代器常见用法实例分析
2019/11/22 Python
PyCharm 专业版安装图文教程
2020/02/20 Python
Python pexpect模块及shell脚本except原理解析
2020/08/03 Python
解决HTML5中滚动到底部的事件问题
2019/08/22 HTML / CSS
I.T集团香港官方商城:ITeSHOP.com Hong Kong
2019/02/15 全球购物
什么是servlet
2012/05/08 面试题
班长岗位职责
2013/11/10 职场文书
《春晓》教学反思
2014/04/20 职场文书
2014年光棍节活动策划方案(创意集锦)
2014/09/29 职场文书
医德医风自我评价2015
2015/03/03 职场文书
导游词之河北野三坡
2019/12/11 职场文书
Go语言中break label与goto label的区别
2021/04/28 Golang
redis的list数据类型相关命令介绍及使用
2022/01/18 Redis