详解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 相关文章推荐
select组合框option的捕捉实例代码
Sep 30 Javascript
jquery的Theme和Theme Switcher使用小结
Sep 08 Javascript
javascript级联下拉列表实例代码(自写)
May 10 Javascript
解决Window10系统下Node安装报错的问题分析
Dec 13 Javascript
bootstrap输入框组件使用方法详解
Jan 19 Javascript
前端开发必知的15个jQuery小技巧
Jan 22 Javascript
Angular 2父子组件数据传递之@ViewChild获取子组件详解
Jul 04 Javascript
Vue中props的使用详解
Jun 15 Javascript
JS实现数组去重,显示重复元素及个数的方法示例
Jan 21 Javascript
利用weixin-java-miniapp生成小程序码并直接返回图片文件流的方法
Mar 29 Javascript
Layui 解决表格异步调用后台分页的问题
Oct 26 Javascript
解决Vue使用bus总线时,第一次路由跳转时数据没成功传递问题
Jul 28 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
第二节 对象模型 [2]
2006/10/09 PHP
微信支付开发教程(一)微信支付URL配置
2014/05/28 PHP
php 问卷调查结果统计
2015/10/08 PHP
PHP使用ajax的post方式下载excel文件简单示例
2019/08/06 PHP
Javascript中eval函数的使用方法与示例
2007/04/09 Javascript
用JavaScrpt实现文件夹简单轻松加密的实现方法图文
2008/09/08 Javascript
分享十五个最佳jQuery 幻灯插件和教程
2010/03/27 Javascript
jQuery基础知识filter()和find()实例说明
2010/07/06 Javascript
BOM与DOM的区别分析
2010/10/26 Javascript
jquery属性选择器not has怎么写 行悬停高亮显示
2013/11/13 Javascript
jQuery获取URL请求参数的方法
2015/07/18 Javascript
基于AngularJS实现页面滚动到底自动加载数据的功能
2015/10/16 Javascript
浅谈bootstrap使用中的一些问题以及解决过程
2016/10/18 Javascript
微信小程序 数据交互与渲染实例详解
2017/01/21 Javascript
JS批量替换内容中关键词为超链接
2017/02/20 Javascript
在vue.js中抽出公共代码的方法示例
2017/06/08 Javascript
JS实现简易的图片拖拽排序实例代码
2017/06/09 Javascript
webpack组织模块打包Library的原理及实现
2018/03/10 Javascript
基于vue写一个全局Message组件的实现
2019/08/15 Javascript
微信小程序模板消息推送的两种实现方式
2019/08/27 Javascript
python结合API实现即时天气信息
2016/01/19 Python
python识别图像并提取文字的实现方法
2019/06/28 Python
用python爬取历史天气数据的方法示例
2019/12/30 Python
python_array[0][0]与array[0,0]的区别详解
2020/02/18 Python
Python 中由 yield 实现异步操作
2020/05/04 Python
深入浅析css3 中display box使用方法
2015/11/25 HTML / CSS
美国知名日用品连锁超市:Dollar General(多来店)
2017/01/14 全球购物
联想新加坡官方网站:Lenovo Singapore
2017/10/24 全球购物
Uber Eats台湾:寻找附近提供送餐服务的餐厅
2018/05/07 全球购物
网上商城创业计划书范文
2014/01/31 职场文书
财产公证书格式
2014/04/10 职场文书
委托证明书
2014/09/17 职场文书
小学教师个人工作总结2015
2015/04/20 职场文书
JavaScript 去重和重复次数统计
2021/03/31 Javascript
CSS 圆形进度栏
2021/04/06 HTML / CSS
Java循环队列与非循环队列的区别总结
2021/06/22 Java/Android