详解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 一个自定义长度的文本自动换行的函数
Aug 19 Javascript
JavaScript页面刷新与弹出窗口问题的解决方法
Mar 02 Javascript
jquery写个checkbox——类似邮箱全选功能
Mar 19 Javascript
jQuery学习笔记之jQuery原型属性和方法
Jun 09 Javascript
JS获取图片高度宽度的方法分享
Apr 17 Javascript
JavaScript对HTML DOM使用EventListener进行操作
Oct 21 Javascript
省市选择的简单实现(基于zepto.js)
Jun 21 Javascript
AngularJS 实现JavaScript 动画效果详解
Sep 08 Javascript
react开发教程之React 组件之间的通信方式
Aug 12 Javascript
vue父组件中获取子组件中的数据(实例讲解)
Sep 27 Javascript
使用Vue完成一个简单的todolist的方法
Dec 01 Javascript
Node.js API详解之 querystring用法实例分析
Apr 29 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
解析thinkphp中的导入文件标签
2013/06/20 PHP
使用php判断网页是否gzip压缩
2013/06/25 PHP
自制PHP框架之路由与控制器
2017/05/07 PHP
Laravel 将数据表的数据导出,并生成seeds种子文件的方法
2019/10/09 PHP
PHP实现简单日历类编写
2020/08/28 PHP
php实现对短信验证码发送次数的限制实例讲解
2021/03/04 PHP
extjs4 treepanel动态改变行高度示例
2013/12/17 Javascript
jQuery+ajax实现无刷新级联菜单示例
2015/05/21 Javascript
Angularjs实现mvvm式的选项卡示例代码
2016/09/08 Javascript
基于ajax与msmq技术的消息推送功能实现代码
2016/12/26 Javascript
微信小程序开发之相册选择和拍照详解及实例代码
2017/02/22 Javascript
JS实现页面内跳转的简单代码
2017/09/03 Javascript
了解ESlint和其相关操作小结
2018/05/21 Javascript
Vue slot用法(小结)
2018/10/22 Javascript
详解React中合并单元格的正确写法
2019/01/08 Javascript
es6数组之扩展运算符操作实例分析
2020/04/25 Javascript
vue elementui tree 任意级别拖拽功能代码
2020/08/31 Javascript
JS异步宏队列微队列原理详解
2020/09/09 Javascript
绘制微信小程序验证码功能的实例代码
2021/01/05 Javascript
[15:09]DOTA2国际邀请赛采访专栏:Loda
2013/08/06 DOTA
[01:32]2016国际邀请赛中国区预选赛IG战队首日赛后采访
2016/06/27 DOTA
解析Python中while true的使用
2015/10/13 Python
如何在Python中编写并发程序
2016/02/27 Python
Python读写Json涉及到中文的处理方法
2016/09/12 Python
详解python 发送邮件实例代码
2016/12/22 Python
Python编写合并字典并实现敏感目录的小脚本
2019/02/26 Python
Django框架封装外部函数示例
2019/05/28 Python
详解python模块pychartdir安装及导入问题
2020/10/22 Python
matplotlib交互式数据光标mpldatacursor的实现
2021/02/03 Python
自我评价优秀范文分享
2013/11/30 职场文书
中学生家长评语大全
2014/04/16 职场文书
大学专科自荐信
2014/06/17 职场文书
2014审计局领导班子民主生活会对照检查材料思想汇报
2014/09/20 职场文书
党员进社区活动总结
2015/05/07 职场文书
使用JS实现简易计算器
2021/06/14 Javascript
分享node.js实现简单登录注册的具体代码
2022/04/26 NodeJs