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 相关文章推荐
web前端开发也需要日志
Dec 09 Javascript
js返回上一页并刷新代码整理
Dec 21 Javascript
优化Jquery,提升网页加载速度
Nov 14 Javascript
Javascript玩转继承(三)
May 08 Javascript
js调试系列 控制台命令行API使用方法
Jun 18 Javascript
浅谈jQuery animate easing的具体使用方法(推荐)
Jun 17 Javascript
写jQuery插件时的注意点
Feb 20 Javascript
three.js加载obj模型的实例代码
Nov 10 Javascript
Vue 幸运大转盘实现思路详解
May 06 Javascript
vue实现搜索过滤效果
May 28 Javascript
ElementUI Tag组件实现多标签生成的方法示例
Jul 08 Javascript
vue遍历生成的输入框 绑定及修改值示例
Oct 30 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
dedecms采集中可以过滤多行代码的正则表达式
2007/03/17 PHP
php 全文搜索和替换的实现代码
2008/07/29 PHP
php实现页面纯静态的实例代码
2017/06/21 PHP
PHP实现使用DOM将XML数据存入数组的方法示例
2017/09/27 PHP
使用laravel的migrate创建数据表的方法
2019/09/30 PHP
在laravel中使用with实现动态添加where条件
2019/10/10 PHP
AJAX的跨域与JSONP(为文章自动添加短址的功能)
2010/01/17 Javascript
jquery获取特定name所有选中的checkbox,支持IE9标准模式
2013/03/18 Javascript
jQuery实现密保互斥问题解决方案
2013/08/16 Javascript
使用JQuery快速实现Tab的AJAX动态载入(实例讲解)
2013/12/11 Javascript
使用ajax+jqtransform实现动态加载select
2014/12/01 Javascript
深入学习Bootstrap表单
2016/12/13 Javascript
学习 NodeJS 第八天:Socket 通讯实例
2016/12/21 NodeJs
微信小程序实现图片预览功能
2018/01/31 Javascript
vue结合Echarts实现点击高亮效果的示例
2018/03/17 Javascript
vue实现的上传图片到数据库并显示到页面功能示例
2018/03/17 Javascript
JS闭包经典实例详解
2018/12/20 Javascript
详解JavaScript中的强制类型转换
2019/04/15 Javascript
微信小程序中的video视频实现 自定义播放按钮、封面图、视频封面上文案
2020/01/02 Javascript
react使用CSS实现react动画功能示例
2020/05/18 Javascript
实例讲解Python爬取网页数据
2018/07/08 Python
pygame游戏之旅 创建游戏窗口界面
2018/11/20 Python
解决Python 命令行执行脚本时,提示导入的包找不到的问题
2019/01/19 Python
Pandas的read_csv函数参数分析详解
2019/07/02 Python
解决pycharm启动后总是不停的updating indices...indexing的问题
2019/11/27 Python
Python通过队列来实现进程间通信的示例
2020/10/14 Python
全球立体声:World Wide Stereo
2018/09/29 全球购物
中国旅游网站:途牛旅游网
2019/09/29 全球购物
泰国第一在线超市:Tops
2021/02/13 全球购物
韩国乐天网上商城:Lotte iMall
2021/02/03 全球购物
结婚典礼证婚词
2014/01/11 职场文书
四好少年事迹材料
2014/01/12 职场文书
新疆民族团结演讲稿
2014/08/27 职场文书
监察局领导班子四风问题整改措施思想汇报
2014/10/05 职场文书
Mysql存储过程、触发器、事件调度器使用入门指南
2022/01/22 MySQL
Spring Boot实现文件上传下载
2022/08/14 Java/Android