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 相关文章推荐
JavaScript中this关键字使用方法详解
Mar 08 Javascript
ymPrompt的doHandler方法来实现获取子窗口返回值的方法
Jun 25 Javascript
javascript面向对象程序设计(一)
Jan 29 Javascript
JavaScript实现字符串与日期的互相转换及日期的格式化
Mar 07 Javascript
详解Node.js模块间共享数据库连接的方法
May 24 Javascript
基于Vuejs实现购物车功能
Aug 02 Javascript
javascript深拷贝(deepClone)详解
Aug 24 Javascript
文本溢出插件jquery.dotdotdot.js使用方法详解
Jun 22 jQuery
常用的9个JavaScript图表库详解
Dec 19 Javascript
Vue项目部署在Spring Boot出现页面空白问题的解决方案
Nov 26 Javascript
vue实现节点增删改功能
Sep 26 Javascript
Vue2.4+新增属性.sync、$attrs、$listeners的具体使用
Mar 08 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中对用户身份认证实现两种方法
2011/06/04 PHP
分享PHP守护进程类
2015/12/30 PHP
Zend Framework动作助手FlashMessenger用法详解
2016/03/05 PHP
php上传图片类及用法示例
2016/05/11 PHP
PHP中phar包的使用教程
2017/06/14 PHP
javascript中字符串替换函数replace()方法与c# 、vb 替换有一点不同
2010/06/25 Javascript
jquery 操作日期、星期、元素的追加的实现代码
2012/02/07 Javascript
用JavaScript实现动画效果的方法
2013/07/20 Javascript
jquery基础教程之deferred对象使用方法
2014/01/22 Javascript
javascript实现的一个带下拉框功能的文本框
2014/05/08 Javascript
字段太多jquey快速清空表单内容方法
2014/08/21 Javascript
nodejs实现bigpipe异步加载页面方案
2016/01/26 NodeJs
JavaScript如何实现组合列表框中元素移动效果
2016/03/01 Javascript
详解JavaScript中数组和字符串的lastIndexOf()方法使用
2016/03/13 Javascript
javascript删除html标签函数cIsHTML
2017/01/09 Javascript
Bootstrap路径导航与分页学习使用
2017/02/08 Javascript
Angularjs根据json文件动态生成路由状态的实现方法
2017/04/17 Javascript
Angular中使用$watch监听object属性值的变化(详解)
2017/04/24 Javascript
node.js平台下利用cookie实现记住密码登陆(Express+Ejs+Mysql)
2017/04/26 Javascript
详解如何将angular-ui的图片轮播组件封装成一个指令
2017/05/09 Javascript
Array数组对象中的forEach、map、filter及reduce详析
2018/08/02 Javascript
JavaScript利用键盘码控制div移动
2020/03/19 Javascript
基于Vue全局组件与局部组件的区别说明
2020/08/11 Javascript
vue路由切换时取消之前的所有请求操作
2020/09/01 Javascript
[00:43]FTP典藏礼包 DOTA2三大英雄霸气新套装
2014/03/21 DOTA
[06:10]6.81新信使新套装!给你一个炫酷的DOTA2
2014/05/06 DOTA
[00:06]Yes,it worked!小卡尔成功穿越时空加入战场!
2019/07/20 DOTA
解决Python print输出不换行没空格的问题
2018/11/14 Python
Pycharm Git 设置方法
2020/09/15 Python
Django项目创建及管理实现流程详解
2020/10/13 Python
德国高尔夫商店:Par71.de
2020/11/29 全球购物
2014党员四风对照检查材料思想汇报
2014/09/17 职场文书
农业项目投资意向书
2015/05/09 职场文书
2015年行风建设工作总结
2015/05/15 职场文书
初中生活随笔
2015/08/15 职场文书
JavaScript parseInt0.0000005打印5原理解析
2022/07/23 Javascript