详解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基础篇
Nov 13 Javascript
自定义一个jquery插件[鼠标悬浮时候 出现说明label]
Jun 27 Javascript
Javascript遍历Html Table示例(包括内容和属性值)
Jul 08 Javascript
node.js中的http.response.writeHead方法使用说明
Dec 14 Javascript
JS实现图片产生波纹一样flash效果的方法
Feb 27 Javascript
jQuery常用的一些技巧汇总
Mar 26 Javascript
AngularJS实现动态编译添加到dom中的方法
Nov 04 Javascript
js实现倒计时及时间对象
Nov 15 Javascript
Node.js Express安装与使用教程
May 11 Javascript
微信小程序实现动态获取元素宽高的方法分析
Dec 10 Javascript
JS实现的杨辉三角【帕斯卡三角形】算法示例
Feb 26 Javascript
Javascript和jquery在selenium的使用过程
Oct 31 jQuery
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
奉献出一个封装的curl函数 便于调用(抓数据专用)
2013/07/22 PHP
ThinkPHP之N方法实例详解
2014/06/20 PHP
php实现文件上传及头像预览功能
2017/01/15 PHP
cookie 最近浏览记录(中文escape转码)具体实现
2013/06/08 Javascript
node.js中的path.normalize方法使用说明
2014/12/08 Javascript
js控制输入框获得和失去焦点时状态显示的方法
2015/01/30 Javascript
js操作table元素实现表格行列新增、删除技巧总结
2015/11/18 Javascript
JavaScript实现获取某个元素相邻兄弟节点的prev与next方法
2016/01/25 Javascript
通过bootstrap全面学习less
2016/11/09 Javascript
微信小程序 radio单选框组件详解及实例代码
2017/01/10 Javascript
JavaScript 中Date对象的格式化代码方法汇总
2017/09/06 Javascript
Angular服务Request异步请求的实例讲解
2018/08/13 Javascript
js array数组对象操作方法汇总
2019/03/18 Javascript
[01:24:51]2014 DOTA2华西杯精英邀请赛 5 25 LGD VS NewBee第二场
2014/05/26 DOTA
[01:10:58]Spirit vs NB Supermajor小组赛 A组败者组决赛 BO3 第二场 6.2
2018/06/03 DOTA
Python实现字典的遍历与排序功能示例
2017/12/23 Python
DataFrame中的object转换成float的方法
2018/04/10 Python
解决Python3 被PHP程序调用执行返回乱码的问题
2019/02/16 Python
Python中使用logging和traceback模块记录日志和跟踪异常
2019/04/09 Python
以SQLite和PySqlite为例来学习Python DB API
2020/02/05 Python
Python3交互式shell ipython3安装及使用详解
2020/07/11 Python
CSS3新属性transition-property transform box-shadow实例学习
2013/06/06 HTML / CSS
Calzedonia美国官网:意大利风格袜子、打底裤和沙滩装
2018/07/19 全球购物
普通PHP程序员笔试题
2016/01/01 面试题
如何用Java判断一个文件或目录是否存在
2012/11/19 面试题
国旗下的讲话演讲稿
2014/05/08 职场文书
世博会口号
2014/06/20 职场文书
国际商务专业毕业生自我鉴定2014
2014/09/27 职场文书
幼儿园大班见习报告
2014/10/31 职场文书
2014年办公室个人工作总结
2014/11/12 职场文书
评先进个人材料
2014/12/29 职场文书
2015年保卫科工作总结
2015/05/14 职场文书
导游词之珠海轮廓
2019/10/25 职场文书
Python中常见的导入方式总结
2021/05/06 Python
使用python+pygame开发消消乐游戏附完整源码
2021/06/10 Python
Python实现位图分割的效果
2021/11/20 Python