Webpack性能优化 DLL 用法详解


Posted in Javascript onAugust 10, 2017

前言

在用 Webpack 打包的时候,对于一些不经常更新的第三方库,比如 react,lodash,我们希望能和自己的代码分离开,Webpack 社区有两种方案

  • CommonsChunkPlugin
  • DLLPlugin

对于 CommonsChunkPlugin,webpack 每次打包实际还是需要去处理这些第三方库,只是打包完之后,能把第三方库和我们自己的代码分开。而DLLPlugin 则是能把第三方代码完全分离开,即每次只打包项目自身的代码。

用法

要使用 DLLPlugin,需要额外新建一个配置文件。所以对于用这种方式打包的项目,一般会有下面两个配置文件

  • webpack.config.js
  • 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 相关文章推荐
Mootools 1.2教程 同时进行多个形变动画
Sep 15 Javascript
JavaScript CSS修改学习第三章 修改样式表
Feb 19 Javascript
jquery调取json数据实现省市级联的方法
Jan 29 Javascript
JavaScript子窗口调用父窗口变量和函数的方法
Oct 09 Javascript
你有必要知道的25个JavaScript面试题
Dec 29 Javascript
AngularJS入门教程之Cookies读写操作示例
Nov 02 Javascript
JS实现给json数组动态赋值的方法示例
Mar 19 Javascript
基于Vue2的独立构建与运行时构建的差别(详解)
Dec 06 Javascript
vue实现简单loading进度条
Jun 06 Javascript
解决vue2.0路由跳转未匹配相应用路由避免出现空白页面的问题
Aug 24 Javascript
JS回调函数深入理解
Oct 16 Javascript
实例分析javascript中的异步
Jun 02 Javascript
详解React Native网络请求fetch简单封装
Aug 10 #Javascript
jQuery Ajax 实现分页 kkpager插件实例代码
Aug 10 #jQuery
JS对象与JSON互转换、New Function()、 forEach()、DOM事件流等js开发基础小结
Aug 10 #Javascript
jquery.uploadView 实现图片预览上传功能
Aug 10 #jQuery
express框架实现基于Websocket建立的简易聊天室
Aug 10 #Javascript
bootstrap table服务端实现分页效果
Aug 10 #Javascript
AngularJs+Bootstrap实现漂亮的计算器
Aug 10 #Javascript
You might like
php debug 安装技巧
2011/04/30 PHP
php结合ajax实现赞、顶、踩功能实例
2014/05/12 PHP
为PHP5.4开启Zend OPCode缓存
2014/12/26 PHP
网站防止被刷票的一些思路与方法
2015/01/08 PHP
PHP封装的MSSql操作类完整实例
2016/05/26 PHP
PHP微信发送推送消息乱码的解决方法
2019/02/28 PHP
laravel清除视图缓存的代码
2019/10/23 PHP
日期函数扩展类Ver0.1.1
2006/09/07 Javascript
javascript中的array数组使用技巧
2010/01/31 Javascript
精通JavaScript 纠正 cleanWhitespace函数
2010/03/11 Javascript
fancybox modal的完美解决(右上的X)
2012/10/30 Javascript
封装html的select标签的js操作实例
2013/07/02 Javascript
node.js 开发指南 ? Node.js 连接 MySQL 并进行数据库操作
2014/07/29 Javascript
实现js保留小数点后N位的代码
2014/11/13 Javascript
jquery在ie7下选择器的问题导致append失效的解决方法
2016/01/10 Javascript
JavaScript中 ES6 generator数据类型详解
2016/08/11 Javascript
详解Sea.js中Module.exports和exports的区别
2017/02/12 Javascript
angular框架实现全选与单选chekbox的自定义
2017/07/06 Javascript
vue 2.0项目中如何引入element-ui详解
2017/09/06 Javascript
vue devtools的安装与使用教程
2018/08/08 Javascript
js实现搜索提示框效果
2020/09/05 Javascript
Vue+Bootstrap实现简易学生管理系统
2021/02/09 Vue.js
python自带的http模块详解
2016/11/06 Python
python网络编程调用recv函数完整接收数据的三种方法
2017/03/31 Python
Ubuntu18.04下python版本完美切换的解决方法
2019/06/14 Python
tensorflow 获取所有variable或tensor的name示例
2020/01/04 Python
Python使用configparser库读取配置文件
2020/02/22 Python
Python3操作YAML文件格式方法解析
2020/04/10 Python
房地产管理毕业生自荐信
2013/11/04 职场文书
网络事业创业计划书范文
2014/01/09 职场文书
争先创优演讲稿
2014/09/15 职场文书
中秋节主题班会
2015/08/14 职场文书
导游词之蓬莱长岛
2019/12/17 职场文书
Jupyter Notebook 如何修改字体和大小以及更改字体样式
2021/06/03 Python
Redis基本数据类型Set常用操作命令
2022/06/01 Redis
使用Postman测试需要授权的接口问题
2022/06/21 Java/Android