详解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 相关文章推荐
Extjs4 关于Store的一些操作(加载/回调/添加)
Apr 18 Javascript
jquery 面包屑导航 具体实现
Jun 05 Javascript
JavaScript String.replace函数参数实例说明
Jun 06 Javascript
jQuery.event兼容各浏览器的event详细解析
Dec 18 Javascript
javascript包装对象实例分析
Mar 27 Javascript
学习使用jquery iScroll.js移动端滚动条插件
Mar 24 Javascript
Bootstrap模块dropdown实现下拉框响应
May 22 Javascript
深入浅析JS是按值传递还是按引用传递(推荐)
Sep 18 Javascript
webpack学习笔记之代码分割和按需加载的实例详解
Jul 20 Javascript
移动端Ionic App 资讯上下循环滚动的实现代码(跑马灯效果)
Aug 29 Javascript
JavaScript通过mouseover()实现图片变大效果的示例
Dec 20 Javascript
vue实现验证码按钮倒计时功能
Apr 10 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
模仿OSO的论坛(四)
2006/10/09 PHP
ThinkPHP php 框架学习笔记
2009/10/30 PHP
php中使用explode查找某个字符是否存在的方法
2011/07/12 PHP
php判断当前用户已在别处登录的方法
2015/01/06 PHP
两款万能的php分页类
2015/11/12 PHP
Thinkphp5.0 框架视图view的比较标签用法分析
2019/10/12 PHP
Laravel 类和接口注入相关的代码
2019/10/15 PHP
纯js实现背景图片切换效果代码
2010/11/14 Javascript
JavaScript中的条件判断语句使用详解
2015/06/03 Javascript
Bootstrap风格的WPF样式
2016/12/07 Javascript
jQuery实现两列等高并自适应高度
2016/12/22 Javascript
浅谈mint-ui loadmore组件注意的问题
2017/11/08 Javascript
详解开发react应用最好用的脚手架 create-react-app
2018/04/24 Javascript
使用wxapp-img-loader自定义组件实现微信小程序图片预加载功能
2018/10/18 Javascript
JS栈stack类的实现与使用方法示例
2019/01/31 Javascript
Vue基础配置讲解
2019/11/29 Javascript
JavaScript函数Call、Apply原理实例解析
2020/02/17 Javascript
如何实现小程序与小程序之间的跳转
2020/11/04 Javascript
Python解析树及树的遍历
2016/02/03 Python
python交互式图形编程实例(二)
2017/11/17 Python
python os用法总结
2018/06/08 Python
Python 最大概率法进行汉语切分的方法
2018/12/14 Python
python+tifffile之tiff文件读写方式
2020/01/13 Python
python中urllib.request和requests的使用及区别详解
2020/05/05 Python
Python的历史与优缺点整理
2020/05/26 Python
Python selenium爬虫实现定时任务过程解析
2020/06/08 Python
django rest framework使用django-filter用法
2020/07/15 Python
Python通过类的组合模拟街道红绿灯
2020/09/16 Python
HTML5新控件之日期和时间选择输入的实现代码
2018/09/13 HTML / CSS
html5开发之viewport使用
2013/10/17 HTML / CSS
html5使用canvas绘制文字特效
2014/12/15 HTML / CSS
标记环网Toke Ring IEEE802.5
2014/05/26 面试题
政府绩效管理实施方案
2014/05/04 职场文书
比赛口号大全
2014/06/10 职场文书
社交电商模式的兴起:这些新的商机千万别错过
2019/07/26 职场文书
Python OpenCV超详细讲解读取图像视频和网络摄像头
2022/04/02 Python