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 相关文章推荐
基于Jquery的淡入淡出的特效基础练习
Dec 13 Javascript
javascript面向对象包装类Class封装类库剖析
Jan 24 Javascript
js导出txt示例代码
Jan 14 Javascript
js实现鼠标经过时图片滚动停止的方法
Feb 16 Javascript
JavaScript中的this关键字使用方法总结
Mar 13 Javascript
jQuery删除节点用法示例(remove方法)
Sep 08 Javascript
微信小程序开发教程之增加mixin扩展
Aug 09 Javascript
apicloud拉起小程序并传递参数的方法示例
Nov 21 Javascript
js实现鼠标拖拽div左右滑动
Jan 15 Javascript
JS实现判断移动端PC端功能
Feb 21 Javascript
Vue环境搭建+VSCode+Win10的详细教程
Aug 19 Javascript
JS前端基于canvas给图片添加水印
Nov 11 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获得用户ip地址的比较不错的方法
2014/02/08 PHP
CodeIgniter模板引擎使用实例
2014/07/15 PHP
jQuery的学习步骤
2011/02/23 Javascript
js弹出窗口之弹出层的小例子
2013/06/17 Javascript
JavaScript fontcolor方法入门实例(按照指定的颜色来显示字符串)
2014/10/17 Javascript
Angularjs中UI Router全攻略
2016/01/29 Javascript
JavaScript中的Number数字类型学习笔记
2016/05/26 Javascript
关于JS Lodop打印插件打印Bootstrap样式错乱问题的解决方案
2016/12/23 Javascript
jQuery html表格排序插件tablesorter使用方法详解
2017/02/10 Javascript
详解Vue组件实现tips的总结
2017/11/01 Javascript
three.js加载obj模型的实例代码
2017/11/10 Javascript
利用vue和element-ui设置表格内容分页的实例
2018/03/02 Javascript
微信小程序实现禁止分享代码实例
2019/10/19 Javascript
js实现类选择器和name属性选择器的示例步骤
2021/02/07 Javascript
Python使用smtplib模块发送电子邮件的流程详解
2016/06/27 Python
用Python写王者荣耀刷金币脚本
2017/12/21 Python
使用Python做垃圾分类的原理及实例代码附源码
2019/07/02 Python
ERLANG和PYTHON互通实现过程详解
2019/07/05 Python
Django缓存系统实现过程解析
2019/08/02 Python
html5定制表单_动力节点Java学院整理
2017/07/11 HTML / CSS
详解HTML5 data-* 自定义属性
2018/01/24 HTML / CSS
Expedia英国:全球最大的在线旅游公司
2017/09/07 全球购物
Hanky Panky官方网站:内衣和睡衣
2019/07/25 全球购物
Solaris操作系统的线程机制
2015/07/28 面试题
安全员岗位职责
2013/11/11 职场文书
医科大学生毕业的自我评价分享
2013/11/12 职场文书
公司市场部岗位职责
2013/12/02 职场文书
应届毕业生个人求职自荐信
2014/01/06 职场文书
学生自我评价范文
2014/02/02 职场文书
四年大学自我鉴定
2014/02/17 职场文书
校本教研活动总结
2014/07/01 职场文书
农村文化活动总结
2014/08/28 职场文书
入党积极分子个人总结
2015/03/02 职场文书
看雷锋电影观后感
2015/06/10 职场文书
钓鱼岛事件感想
2015/08/11 职场文书
Nginx配置https的实现
2021/11/27 Servers