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 相关文章推荐
让firefox支持IE的一些方法的javascript扩展函数代码
Jan 02 Javascript
Redis基本知识、安装、部署、配置笔记
Mar 05 Javascript
javascript制作的滑动图片菜单
May 15 Javascript
简介JavaScript中的push()方法的使用
Jun 09 Javascript
Vue.js每天必学之方法与事件处理器
Sep 06 Javascript
Bootstrap选项卡动态切换效果
Nov 28 Javascript
JQuery异步提交表单与文件上传功能示例
Jan 12 Javascript
react 创建单例组件的方法
Apr 26 Javascript
Koa从零搭建到Api实现项目的搭建方法
Jul 30 Javascript
PHP读取远程txt文档到数组并实现遍历
Aug 25 Javascript
JavaScript 几种循环方式以及模块化的总结
Sep 03 Javascript
vue项目配置sass及引入外部scss文件
Apr 14 Vue.js
详解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操作数组相关函数
2011/02/03 PHP
php array的学习笔记
2012/05/16 PHP
PHP类与对象中的private访问控制的疑问
2012/11/01 PHP
php指定函数参数默认值示例代码
2013/12/04 PHP
很可爱的输入框
2008/08/03 Javascript
javascript 隐藏/显示指定的区域附HTML元素【legend】用法
2010/03/05 Javascript
onsubmit阻止form表单提交与onclick的相关操作
2010/09/03 Javascript
利用jQuery设计一个简单的web音乐播放器的实例分享
2016/03/08 Javascript
Javascript中获取浏览器类型和操作系统版本等客户端信息常用代码
2016/06/28 Javascript
jQuery组件easyui基本布局实现代码
2016/08/25 Javascript
JavaScript输入框字数实时统计更新
2017/06/17 Javascript
使用OPENLAYERS3实现点选的方法
2020/09/24 Javascript
利用javascript如何随机生成一定位数的密码
2017/09/22 Javascript
解决vue-cli项目webpack打包后iconfont文件路径的问题
2018/09/01 Javascript
antd Upload 文件上传的示例代码
2018/12/14 Javascript
微信小程序实现弹出菜单动画
2019/06/21 Javascript
在Node.js中将SVG图像转换为PNG,JPEG,TIFF,WEBP和HEIF格式的方法
2019/08/22 Javascript
layui 对table中的数据进行转义的实例
2019/09/12 Javascript
基于javascript实现日历功能原理及代码实例
2020/05/07 Javascript
基于JS实现操作成功之后自动跳转页面
2020/09/25 Javascript
Python常用随机数与随机字符串方法实例
2015/04/09 Python
python实现爬虫下载美女图片
2015/07/14 Python
python目录与文件名操作例子
2016/08/28 Python
Pytorch中的VGG实现修改最后一层FC
2020/01/15 Python
Python如何绘制日历图和热力图
2020/08/07 Python
python爬虫实现爬取同一个网站的多页数据的实例讲解
2021/01/18 Python
使用html5+css3来实现slider切换效果告别javascript+css
2013/01/08 HTML / CSS
大学生村官工作感言
2014/01/10 职场文书
执行总经理岗位职责
2014/02/03 职场文书
周年庆促销方案
2014/03/15 职场文书
2015年设计师个人工作总结
2015/04/25 职场文书
建党伟业观后感
2015/06/01 职场文书
小学音乐课教学反思
2016/02/18 职场文书
Nginx优化服务之网页压缩的实现方法
2021/03/31 Servers
ES6 解构赋值的原理及运用
2021/05/25 Javascript
详解解Django 多对多表关系的三种创建方式
2021/08/23 Python