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 相关文章推荐
JS重要知识点小结
Nov 06 Javascript
Javascript弹出窗口的各种方法总结
Nov 11 Javascript
jQuery多级手风琴菜单实例讲解
Oct 22 Javascript
浅谈MVC+EF easyui dataGrid 动态加载分页表格
Nov 10 Javascript
HTML5 js实现拖拉上传文件功能
Nov 20 Javascript
数组Array的一些方法(总结)
Feb 17 Javascript
基于pako.js实现gzip的压缩和解压功能示例
Jun 13 Javascript
微信小程序 页面跳转事件绑定的实例详解
Sep 20 Javascript
JS实现利用两个队列表示一个栈的方法
Dec 13 Javascript
使用node.js实现微信小程序实时聊天功能
Aug 13 Javascript
微信小程序wx.navigateTo中events属性实现页面间通信传值,数据同步
Jul 13 Javascript
解决layui下拉框监听问题(监听不到值的变化)
Sep 28 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
调试WordPress中定时任务的相关PHP脚本示例
2015/12/10 PHP
Laravel5.1数据库连接、创建数据库、创建model及创建控制器的方法
2016/03/29 PHP
escape、encodeURI 和 encodeURIComponent 的区别
2009/03/02 Javascript
jquery动态加载图片数据练习代码
2011/08/04 Javascript
js字符串转换成xml对象并使用技巧解读
2013/04/18 Javascript
js+css实现增加表单可用性之提示文字
2013/06/03 Javascript
JS小功能(操作Table--动态添加删除表格及数据)实现代码
2013/11/28 Javascript
Jquery ajax 同步阻塞引起的UI线程阻塞问题
2015/11/17 Javascript
谈一谈javascript中继承的多种方式
2016/02/19 Javascript
深入探究JavaScript中for循环的效率问题及相关优化
2016/03/13 Javascript
JS &amp; JQuery 动态添加 select option
2016/06/08 Javascript
JS中input表单隐藏域及其使用方法
2017/02/13 Javascript
基于D3.js实现时钟效果
2018/07/17 Javascript
node.js使用 http-proxy 创建代理服务器操作示例
2020/02/10 Javascript
JavaScript事件委托实现原理及优点进行
2020/08/29 Javascript
Python中使用PIPE操作Linux管道
2015/02/04 Python
Python封装shell命令实例分析
2015/05/05 Python
Python中单、双下划线的区别总结
2017/12/01 Python
python实现微信发送邮件关闭电脑功能
2018/02/22 Python
Python计算一个给定时间点前一个月和后一个月第一天的方法
2018/05/29 Python
python os.path模块常用方法实例详解
2018/09/16 Python
解决pycharm无法识别本地site-packages的问题
2018/10/13 Python
使用Tensorflow将自己的数据分割成batch训练实例
2020/01/20 Python
利用CSS3的特性改变文本选中时的颜色
2013/09/11 HTML / CSS
利物浦足球俱乐部官方商店(美国):Liverpool FC US
2019/10/09 全球购物
为什么要做架构设计
2015/07/08 面试题
机械绘图员岗位职责
2013/11/19 职场文书
服务行业口号
2014/06/11 职场文书
党员弘扬焦裕禄精神思想汇报
2014/09/10 职场文书
收款委托书
2014/10/14 职场文书
水电工岗位职责
2015/02/14 职场文书
业务内勤岗位职责
2015/04/13 职场文书
入党积极分子党支部意见
2015/06/02 职场文书
2015秋季田径运动会广播稿
2015/08/19 职场文书
小米11和iphone12哪个值得买?小米11对比iphone12评测
2021/04/21 数码科技
Win11如何修改dns?Win11修改dns图文教程
2022/01/18 数码科技