详解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 相关文章推荐
JS在IE和FF下attachEvent,addEventListener学习笔记
Nov 26 Javascript
用JavaScript对JSON进行模式匹配(Part 1-设计)
Jul 17 Javascript
自制基于jQuery的智能提示插件一枚
Feb 18 Javascript
jquery基础教程之deferred对象使用方法
Jan 22 Javascript
jquery插件lazyload.js延迟加载图片的使用方法
Feb 19 Javascript
javascript使用shift+click实现选择和反选checkbox的方法
May 04 Javascript
javascript cookie用法基础教程(概念,设置,读取及删除)
Sep 20 Javascript
微信小程序 rpx 尺寸单位详细介绍
Oct 13 Javascript
基于javascript实现数字英文验证码
Jan 25 Javascript
Nuxt.js踩坑总结分享
Jan 18 Javascript
JS实现随机抽选获奖者
Nov 07 Javascript
Vue 自适应高度表格的实现方法
May 13 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实现上传多文件示例代码
2017/02/20 PHP
php 中htmlentities导致中文无法查询问题
2018/09/10 PHP
PHP操作Redis常用命令的实例详解
2020/12/23 PHP
js获取当前页面的url网址信息
2014/06/12 Javascript
js点击button按钮跳转到另一个新页面
2014/10/10 Javascript
JavaScript实现简单的二级导航菜单实例
2015/04/15 Javascript
C++中的string类的用法小结
2015/08/07 Javascript
JavaScript获取css行间样式,内连样式和外链样式的简单方法
2016/07/18 Javascript
Angular 2父子组件数据传递之@Input和@Output详解(下)
2017/07/05 Javascript
JS基于for语句编写的九九乘法表示例
2018/01/04 Javascript
Bootstrap popover 实现鼠标移入移除显示隐藏功能方法
2018/01/24 Javascript
angularjs数组判断是否含有某个元素的实例
2018/02/27 Javascript
vue左侧菜单,树形图递归实现代码
2018/08/24 Javascript
jQuery解析json格式数据示例
2018/09/01 jQuery
jQuery实现图片切换效果
2020/10/19 jQuery
[00:35]2016完美“圣”典风云人物:冷冷宣传片
2016/12/08 DOTA
[03:16]DOTA2完美大师赛小组赛精彩集锦
2017/11/22 DOTA
[48:54]VGJ.T vs infamous Supermajor小组赛D组败者组第一轮 BO3 第二场 6.3
2018/06/04 DOTA
[43:26]完美世界DOTA2联赛PWL S2 Forest vs Rebirth 第二场 11.20
2020/11/23 DOTA
python自动zip压缩目录的方法
2015/06/28 Python
小米5s微信跳一跳小程序python源码
2018/01/08 Python
Python实现求解一元二次方程的方法示例
2018/06/20 Python
python re正则匹配网页中图片url地址的方法
2018/12/20 Python
Python如何获得百度统计API的数据并发送邮件示例代码
2019/01/27 Python
详解如何设置Python环境变量?
2019/05/13 Python
python使用OpenCV模块实现图像的融合示例代码
2020/04/10 Python
上海中网科技笔试题
2012/02/19 面试题
大四学生毕业自荐信
2013/11/07 职场文书
农村党员一句话承诺
2014/05/30 职场文书
授权委托书范文
2014/07/31 职场文书
后备干部推荐材料
2014/12/24 职场文书
营销计划书
2015/01/17 职场文书
政审证明范文
2015/06/19 职场文书
廉政党课工作报告案例
2019/06/21 职场文书
Golang全局变量加锁的问题解决
2021/05/08 Golang
redis requires ruby version2.2.2的解决方案
2021/07/15 Redis