详解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英文日期(有时间)选择器
May 02 Javascript
获取焦点时,利用js定时器设定时间执行动作
Apr 02 Javascript
Ajax执行顺序流程及回调问题分析
Dec 10 Javascript
详解JavaScript的策略模式编程
Jun 24 Javascript
javascript弹出窗口实现代码
Nov 12 Javascript
基于jQuery实现的仿百度首页滑动选项卡效果代码
Nov 16 Javascript
vue的Virtual Dom实现snabbdom解密
May 03 Javascript
js脚本编写简单刷票投票系统
Jun 27 Javascript
关于TypeScript中import JSON的正确姿势详解
Jul 25 Javascript
vue实现提示保存后退出的方法
Mar 15 Javascript
vue子路由跳转实现tab选项卡
Jul 24 Javascript
vue开发简单上传图片功能
Jun 30 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
最贵的咖啡是怎么产生的,它的风味怎么样?
2021/03/04 新手入门
留言板翻页的实现详解
2006/10/09 PHP
php中使用preg_match_all匹配文章中的图片
2013/02/06 PHP
php获取域名的google收录示例
2014/03/24 PHP
PHP输出两个数字中间有多少个回文数的方法
2015/03/23 PHP
php实现的网络相册图片防盗链完美破解方法
2015/07/01 PHP
laravel 中某一字段自增、自减的例子
2019/10/11 PHP
javascript实现的距离现在多长时间后的一个格式化的日期
2009/10/29 Javascript
JavaScript 对象链式操作测试代码
2010/04/25 Javascript
js实现简洁的TAB滑动门效果代码
2015/09/06 Javascript
JavaScript对象数组的排序处理方法
2015/10/21 Javascript
基于JavaScript实现 网页切出 网站title变化代码
2016/04/03 Javascript
javascript的replace方法结合正则使用实例总结
2016/06/16 Javascript
JS实现控制文本框的内容
2016/07/10 Javascript
Angular设置title信息解决SEO方面存在问题
2016/08/19 Javascript
使用jquery给新生的th绑定hover事件的实例
2017/02/10 Javascript
js实现随机点名小功能
2017/08/17 Javascript
vue+node+webpack环境搭建教程
2017/11/05 Javascript
关于vue-router的那些事儿
2018/05/23 Javascript
Python 2.7.x 和 3.x 版本的重要区别小结
2014/11/28 Python
Python中遇到的小问题及解决方法汇总
2017/01/11 Python
取numpy数组的某几行某几列方法
2018/04/03 Python
python对日志进行处理的实例代码
2018/10/06 Python
不知道这5种下划线的含义,你就不算真的会Python!
2018/10/09 Python
python读取目录下最新的文件夹方法
2018/12/24 Python
Python微信操控itchat的方法
2019/05/31 Python
python pytest进阶之fixture详解
2019/06/27 Python
查看Python依赖包及其版本号信息的方法
2019/08/13 Python
Python3如何在服务器打印资产信息
2020/08/27 Python
CSS3提交意见输入框样式代码
2014/10/30 HTML / CSS
香港礼品网站:GiftU eshop
2017/09/01 全球购物
GoPro摄像机美国官网:美国运动相机厂商
2018/07/03 全球购物
银行会计职员个人的自我评价
2013/09/29 职场文书
2015年专项整治工作总结
2015/04/03 职场文书
繁星春水读书笔记
2015/06/30 职场文书
利用python调用摄像头的实例分析
2021/06/07 Python