详解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获取scrollHeight问题想到的标准问题
May 27 Javascript
深入理解JavaScript系列(16) 闭包(Closures)
Apr 12 Javascript
Javascript:为input设置readOnly属性(示例讲解)
Dec 25 Javascript
jquery实现一个简单好用的弹出框
Sep 26 Javascript
浅析Node.js中使用依赖注入的相关问题及解决方法
Jun 24 Javascript
jQuery基于json与cookie实现购物车的方法
Apr 15 Javascript
总结JavaScript设计模式编程中的享元模式使用
May 21 Javascript
浅谈JS中的!=、== 、!==、===的用法和区别
Sep 24 Javascript
vue实现移动端图片裁剪上传功能
Aug 18 Javascript
深入理解React中何时使用箭头函数
Aug 23 Javascript
基于BootStrap的文本编辑器组件Summernote
Oct 27 Javascript
微信小程序实现轨迹回放的示例代码
Dec 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中Object对象的笔记分享
2011/06/28 PHP
zf框架的db类select查询器join链表使用示例(zend框架)
2014/03/14 PHP
浅谈discuz密码加密的方式
2014/05/22 PHP
教你如何在CI框架中使用 .htaccess 隐藏url中index.php
2014/06/09 PHP
老司机传授Ubuntu下Apache+PHP+MySQL环境搭建攻略
2016/03/20 PHP
php中对象引用和复制实例分析
2019/08/14 PHP
php 策略模式原理与应用深入理解
2019/09/25 PHP
使弱类型的语言JavaScript变强势
2009/06/22 Javascript
jQuery实现下拉框左右选择的简单实例
2014/02/22 Javascript
JavaScript实现非常简单实用的下拉菜单效果
2015/08/27 Javascript
jquery实现的判断倒计时是否结束代码
2016/02/05 Javascript
教你如何终止JQUERY的$.AJAX请求
2016/02/23 Javascript
使用AJAX实现Web页面进度条的实例分享
2016/05/06 Javascript
最简单纯JavaScript实现Tab标签页切换的方式(推荐)
2016/07/25 Javascript
jQuery为DOM动态追加事件的方法
2017/02/16 Javascript
Angularjs自定义指令Directive详解
2017/05/27 Javascript
Node.js readline模块与util模块的使用
2018/03/01 Javascript
JS实现可视化文件上传
2018/09/08 Javascript
常见的浏览器存储方式(cookie、localStorage、sessionStorage)
2019/05/07 Javascript
[48:37]EG vs OG 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
Python OrderedDict的使用案例解析
2019/10/25 Python
通过python调用adb命令对App进行性能测试方式
2020/04/23 Python
韩国女装NO.1网店:STYLENANDA
2016/09/16 全球购物
英国设计师珠宝网站:Joshua James Jewellery
2020/03/01 全球购物
size?法国官网:英国伦敦的球鞋精品店
2020/03/15 全球购物
Nike俄罗斯官方网站:Nike RU
2021/03/05 全球购物
主键(Primary Key)约束和唯一性(UNIQUE)约束的区别
2013/05/29 面试题
会计专业毕业生自我鉴定
2013/10/29 职场文书
优秀党支部书记事迹材料
2014/05/29 职场文书
村党的群众路线教育实践活动工作总结
2014/10/25 职场文书
大学生学期个人总结
2015/02/12 职场文书
自主招生推荐信格式模板
2015/03/24 职场文书
感恩节寄语2015
2015/03/24 职场文书
KTV员工管理制度
2015/08/06 职场文书
入党申请书怎么写?
2019/06/21 职场文书
使用 Apache 反向代理的设置技巧
2022/01/18 Servers