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实现运动logo图片效果及运动元素对象sportBox使用方法
Dec 25 Javascript
ANT 压缩(去掉空格/注释)JS文件可提高js运行速度
Apr 15 Javascript
js调用打印机打印网页字体总是缩小一号的解决方法
Jan 24 Javascript
extjs 时间范围选择自动判断的实现代码
Jun 24 Javascript
分享一则javascript 调试技巧
Jan 02 Javascript
在javascript中随机数 math random如何生成指定范围数值的随机数
Oct 21 Javascript
JavaScript学习笔记之数组的增、删、改、查
Mar 23 Javascript
JSON 必知必会 观后记
Oct 27 Javascript
JS绘制微信小程序画布时钟
Dec 24 Javascript
jQuery插件FusionCharts绘制的2D双面积图效果示例【附demo源码】
Apr 11 jQuery
ReactNative短信验证码倒计时控件的实现代码
Jul 20 Javascript
基于vue如何发布一个npm包的方法步骤
May 15 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中使用preg_match_all匹配文章中的图片
2013/02/06 PHP
php 判断是否是中文/英文/数字示例代码
2013/09/30 PHP
jQuery Mobile + PHP实现文件上传
2014/12/12 PHP
PHP安装memcached扩展笔记
2015/05/28 PHP
php HTML无刷新提交表单
2016/04/05 PHP
PHP控制前台弹出对话框的实现方法
2016/08/21 PHP
Laravel中任务调度console使用方法小结
2017/05/07 PHP
给moz-firefox下添加IE方法和属性
2007/04/10 Javascript
客户端限制只能上传jpg格式图片的js代码
2010/12/09 Javascript
基于NodeJS的前后端分离的思考与实践(四)安全问题解决方案
2014/09/26 NodeJs
JavaScript检查数字是否为整数或浮点数的方法
2015/06/09 Javascript
jQuery焦点图轮播效果实现方法
2016/12/19 Javascript
js实现前端图片上传即时预览功能
2017/08/02 Javascript
JavaScript实现多重继承的方法分析
2018/01/09 Javascript
React从react-router路由上做登陆验证控制的方法
2018/05/10 Javascript
回顾Javascript React基础
2019/06/15 Javascript
python读取注册表中值的方法
2013/04/08 Python
python实现倒计时的示例
2014/02/14 Python
python每隔N秒运行指定函数的方法
2015/03/16 Python
Python从文件中读取数据的方法讲解
2019/02/14 Python
详解python的argpare和click模块小结
2019/03/31 Python
Python实现 版本号对比功能的实例代码
2019/04/18 Python
详解Python文件修改的两种方式
2019/08/22 Python
详解Python中pyautogui库的最全使用方法
2020/04/01 Python
matplotlib subplot绘制多个子图的方法示例
2020/07/28 Python
Python 如何创建一个线程池
2020/07/28 Python
pytorch加载语音类自定义数据集的方法教程
2020/11/10 Python
python 实现围棋游戏(纯tkinter gui)
2020/11/13 Python
中国电视购物:快乐购
2017/02/04 全球购物
橄榄树药房:OLIVEDA
2019/09/01 全球购物
给领导的致歉信范文
2014/01/13 职场文书
保安队长职务说明书
2014/02/23 职场文书
超市中秋节促销方案
2014/03/21 职场文书
电影建党伟业观后感
2015/06/01 职场文书
小学一年级数学教学反思
2016/02/16 职场文书
vue使用element-ui按需引入
2022/05/20 Vue.js