详解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调用
Jun 24 Javascript
jquery实现多行文字图片滚动效果示例代码
Oct 10 Javascript
jQuery对象的length属性用法实例
Dec 27 Javascript
js对象的复制继承实例
Jan 10 Javascript
手机端图片缩放旋转全屏查看PhotoSwipe.js插件实现
Aug 25 Javascript
原生JavaScript来实现对dom元素class的操作方法(推荐)
Aug 16 Javascript
JavaScript中一些特殊的字符运算
Aug 17 Javascript
vue2.0 和 animate.css的结合使用
Dec 12 Javascript
element ui里dialog关闭后清除验证条件方法
Feb 26 Javascript
taro开发微信小程序的实践
May 21 Javascript
微信小程序前端自定义分享的实现方法
Jun 13 Javascript
微信小程序实现Swiper轮播图效果
Nov 22 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
探讨:如何通过stats命令分析Memcached的内部状态
2013/06/14 PHP
浅析PHP 按位与或 (^ 、&amp;)
2013/06/21 PHP
php inc文件使用的风险和注意事项
2013/11/12 PHP
zf框架的校验器使用使用示例(自定义校验器和校验器链)
2014/03/13 PHP
PHP MVC框架路由学习笔记
2016/03/02 PHP
PHP常用函数之获取汉字首字母功能示例
2019/10/21 PHP
广告显示判断
2006/08/31 Javascript
日期函数扩展类Ver0.1.1
2006/09/07 Javascript
JavaScript 读取元素的CSS信息的代码
2010/02/07 Javascript
判断多个input type=file是否有已经选择好文件的代码
2012/05/23 Javascript
jQuery Tools tab(幻灯片)
2012/07/14 Javascript
javascript中的Base64、UTF8编码与解码详解
2015/03/18 Javascript
jQuery实现仿百度帖吧头部固定导航效果
2015/08/07 Javascript
安装使用Mongoose配合Node.js操作MongoDB的基础教程
2016/03/01 Javascript
javaScript给元素添加多个class的简单实现
2016/07/20 Javascript
AngularJS基础 ng-submit 指令简单示例
2016/08/03 Javascript
jQuery利用sort对DOM元素进行排序操作
2016/11/07 Javascript
Ionic + Angular.js实现图片轮播的方法示例
2017/05/21 Javascript
js 客户端打印html 并且去掉页眉、页脚的实例
2017/11/03 Javascript
原生JS实现的多个彩色小球跟随鼠标移动动画效果示例
2018/02/01 Javascript
js使用ajax传值给后台,后台返回字符串处理方法
2018/08/08 Javascript
微信{"errcode":48001,"errmsg":"api unauthorized, hints: [ req_id: 1QoCla0699ns81 ]"}
2018/10/12 Javascript
Vue+Express实现登录注销功能的实例代码
2019/05/05 Javascript
Weex开发之WEEX-EROS开发踩坑(小结)
2019/10/16 Javascript
详解django中自定义标签和过滤器
2017/07/03 Python
Python中断多重循环的几种方式详解
2020/02/10 Python
使用CSS3来制作消息提醒框
2015/07/12 HTML / CSS
美国首屈一指的高品质珠宝设计师和零售商:Allurez
2018/01/23 全球购物
体验完美剃须:The Art of Shaving
2018/08/06 全球购物
改作风抓落实促发展心得体会
2014/09/10 职场文书
干部作风建设年活动剖析材料
2014/10/23 职场文书
党的群众路线教育实践活动制度建设计划方案
2014/10/31 职场文书
文明班级申报材料
2014/12/24 职场文书
公司介绍信范文
2015/01/31 职场文书
golang elasticsearch Client的使用详解
2021/05/05 Golang
Golang实现可重入锁的示例代码
2022/05/25 Golang