Webpack性能优化 DLL 用法详解

发布时间 - 2026-01-11 02:44:10    点击率:

前言

在用 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 文件,需要更新的时候,也会自动更新。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# Webpack  # DLL  # 用法  # 详解vue-cli + webpack 多页面实例配置优化方法  # vue webpack打包优化操作技巧  # webpack4.0打包优化策略整理小结  # 详解基于vue-cli优化的webpack配置  # 详解vue-cli之webpack3构建全面提速优化  # webpack学习笔记之优化缓存、合并、懒加载  # vue-cli webpack2项目打包优化分享  # 浅谈Webpack打包优化技巧  # 详解webpack 热更新优化  # webpack优化的深入理解  # 第三方  # 自己的  # 配置文件  # 能把  # 会有  # 也会  # 则是  # 只需  # 希望能  # 写了  # 只需要  # 要对  # 便会  # 有两种  # 如在  # 要使  # 使用这个  # 中要  # 自动生成  # 大家多多 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: php增删改查怎么学_零基础入门php数据库操作必知基础【教程】  Laravel如何实现文件上传和存储?(本地与S3配置)  Laravel如何实现用户密码重置功能?(完整流程代码)  Laravel Debugbar怎么安装_Laravel调试工具栏配置指南  如何用美橙互联一键搭建多站合一网站?  Laravel如何实现多语言支持_Laravel本地化与国际化(i18n)配置教程  详解jQuery中基本的动画方法  Laravel如何使用Guzzle调用外部接口_Laravel发起HTTP请求与JSON数据解析【详解】  Laravel API资源类怎么用_Laravel API Resource数据转换  微信小程序 配置文件详细介绍  Laravel如何实现事件和监听器?(Event & Listener实战)  高性能网站服务器部署指南:稳定运行与安全配置优化方案  如何在搬瓦工VPS快速搭建网站?  Python图片处理进阶教程_Pillow滤镜与图像增强  Win11怎么关闭专注助手 Win11关闭免打扰模式设置【操作】  如何登录建站主机?访问步骤全解析  如何在腾讯云免费申请建站?  大连 网站制作,大连天途有线官网?  文字头像制作网站推荐软件,醒图能自动配文字吗?  网站建设要注意的标准 促进网站用户好感度!  网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?  如何用好域名打造高点击率的自主建站?  java ZXing生成二维码及条码实例分享  Laravel中的Facade(门面)到底是什么原理  JS经典正则表达式笔试题汇总  如何在七牛云存储上搭建网站并设置自定义域名?  google浏览器怎么清理缓存_谷歌浏览器清除缓存加速详细步骤  nginx修改上传文件大小限制的方法  Laravel如何配置和使用缓存?(Redis代码示例)  Laravel如何发送邮件和通知_Laravel邮件与通知系统发送步骤  Laravel Artisan命令怎么自定义_创建自己的Laravel命令行工具完全指南  网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?  phpredis提高消息队列的实时性方法(推荐)  Python文件异常处理策略_健壮性说明【指导】  如何在 React 中条件性地遍历数组并渲染元素  EditPlus中的正则表达式实战(6)  如何快速查询网站的真实建站时间?  Laravel Fortify是什么,和Jetstream有什么关系  今日头条微视频如何找选题 今日头条微视频找选题技巧【指南】  ChatGPT回答中断怎么办 引导AI继续输出完整内容的方法  如何基于云服务器快速搭建网站及云盘系统?  Laravel怎么发送邮件_Laravel Mail类SMTP配置教程  Laravel怎么做缓存_Laravel Cache系统提升应用速度的策略与技巧  UC浏览器如何切换小说阅读源_UC浏览器阅读源切换【方法】  香港服务器部署网站为何提示未备案?  大连网站制作公司哪家好一点,大连买房网站哪个好?  Android滚轮选择时间控件使用详解  网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?  Laravel策略(Policy)如何控制权限_Laravel Gates与Policies实现用户授权  Laravel如何使用Spatie Media Library_Laravel图片上传管理与缩略图生成【步骤】