详解Webpack DLL用法以及功能


Posted in Javascript onJuly 11, 2017

在使用webpack过程中,本人也发现发现构建速度非常慢,Webpack性能优化的方式有很多种,本文介绍了dll,dll是一种最简单粗暴并且极其有效的优化方式。

前言

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

  1. CommonsChunkPlugin
  2. DLLPlugin

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

用法

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

  1. webpack.config.js
  2. 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读取xml
Nov 04 Javascript
JQuery扩展插件Validate 3通过参数设置错误信息
Sep 05 Javascript
利用Jquery实现可多选的下拉框
Feb 21 Javascript
jquery实现ajax提交form表单的方法总结
Mar 03 Javascript
iframe里的页面禁止右键事件的方法
Jun 10 Javascript
js实现同一页面可多次调用的图片幻灯切换效果
Feb 28 Javascript
JavaScript将一个数组插入到另一个数组的方法
Mar 19 Javascript
Bootstrap开发中Tab标签页切换图表显示问题的解决方法
Jul 13 Javascript
node.js的http.createServer过程深入解析
Jun 06 Javascript
JS Math对象与Math方法实例小结
Jul 05 Javascript
详解Vue3 Composition API中的提取和重用逻辑
Apr 29 Javascript
详解阿里Node.js技术文档之process模块学习指南
Jan 04 Javascript
Bootstrap弹出框之自定义悬停框标题、内容和样式示例代码
Jul 11 #Javascript
node使用UEditor富文本编辑器的方法实例
Jul 11 #Javascript
Vue.js结合Ueditor富文本编辑器的实例代码
Jul 11 #Javascript
BootStrap Table复选框默认选中功能的实现代码(从数据库获取到对应的状态进行判断是否为选中状态)
Jul 11 #Javascript
JS自定义滚动条效果简单实现代码
Oct 27 #Javascript
jQuery实现节点的追加、替换、删除、复制功能示例
Jul 11 #jQuery
微信小程序分页加载的实例代码
Jul 11 #Javascript
You might like
PHP实现异步调用方法研究与分享
2011/10/27 PHP
PHP函数func_num_args用法实例分析
2015/12/07 PHP
Yii模型操作之criteria查找数据库的方法
2016/07/15 PHP
基于php+MySql实现学生信息管理系统实例
2020/08/04 PHP
Jquery如何实现点击时高亮显示代码
2014/01/22 Javascript
防止按钮在短时间内被多次点击的方法
2014/03/10 Javascript
jQuery常用数据处理方法小结
2015/02/20 Javascript
jquery简单插件制作(fn.extend)完整实例
2016/05/24 Javascript
js弹出窗口返回值的简单实例
2016/05/28 Javascript
Bootstrap 布局组件(全)
2016/07/18 Javascript
jQuery实现的省市联动菜单功能示例【测试可用】
2017/01/13 Javascript
Angular.js实现多个checkbox只能选择一个的方法示例
2017/02/24 Javascript
微信小程序生成分享海报方法(附带二维码生成)
2019/03/29 Javascript
Vue混入mixins滚动触底的方法
2019/11/22 Javascript
jquery css实现流程进度条
2020/03/26 jQuery
vue+render+jsx实现可编辑动态多级表头table的实例代码
2020/04/01 Javascript
python 动态获取当前运行的类名和函数名的方法
2014/04/15 Python
Python自动调用IE打开某个网站的方法
2015/06/03 Python
Python正则表达式教程之一:基础篇
2017/03/02 Python
Python实现的当前时间多加一天、一小时、一分钟操作示例
2018/05/21 Python
使用Python AIML搭建聊天机器人的方法示例
2018/07/09 Python
Python实现打砖块小游戏代码实例
2019/05/18 Python
Django CSRF跨站请求伪造防护过程解析
2019/07/31 Python
Win下PyInstaller 安装和使用教程
2019/12/25 Python
python模拟实现斗地主发牌
2020/01/07 Python
pycharm远程连接vagrant虚拟机中mariadb数据库
2020/06/05 Python
python中的django是做什么的
2020/07/31 Python
python用Tkinter做自己的中文代码编辑器
2020/09/07 Python
Python3 pyecharts生成Html文件柱状图及折线图代码实例
2020/09/29 Python
微信小程序实现可实时改变转速的css3旋转动画实例代码
2018/09/11 HTML / CSS
Html5移动端div固定到底部实现底部导航条的几种方式
2021/03/09 HTML / CSS
馥蕾诗美国官网:Fresh美国
2019/10/09 全球购物
乡镇领导班子四风对照检查材料
2014/09/27 职场文书
2015年社区综治工作总结
2015/04/21 职场文书
2016消防宣传标语口号
2015/12/26 职场文书
2019年朋友圈经典励志语录50条
2019/07/05 职场文书