包文件分析器 Webpack Bundle Analyzer

news2025/1/23 2:54:43

webpack-bundle-analyzer 是一个非常有用的工具,用于可视化和分析 Webpack 打包生成的文件。这使得开发者能够更好地理解应用的依赖关系、包的大小,以及优化打包的机会。以下是关于 webpack-bundle-analyzer 的详细介绍,包括它的安装、使用以及如何解读生成的报告。文档。

安装

你可以通过 npm 或 yarn 安装 webpack-bundle-analyzer

npm install --save-dev webpack-bundle-analyzer

或者使用 yarn:

yarn add --dev webpack-bundle-analyzer

配置

webpack-bundle-analyzer 可以通过多种方式使用,以下是常见的几种:

1. 在 Webpack 配置中使用

在你的 Webpack 配置文件中引入 webpack-bundle-analyzer 插件,并将其添加到 plugins 数组中。

const { BundleAnalyzerPlugin } = require('webpack-bundle-analyzer');

module.exports = {
    // 其他配置...
    plugins: [
        new BundleAnalyzerPlugin({
            // 这里可以设置一些选项
            analyzerMode: 'static', 
            analyzerPort: 8888,
            reportFilename: 'report.html', // 打包后的报告文件名
            openAnalyzer: true, // 自动打开报告
            generateStatsFile: true, // 生成 stats.json 文件
            statsFilename: 'stats.json', // stats 文件名称
        }),
        // 其他插件...
    ],
};

运行Webpack并生成分析报告:

npx webpack --mode production

 这将在dist目录下生成一个report.html文件,打开这个文件,你将看到一个交互式的图表,显示了你的包的大小分布。

在上述配置中,analyzerMode 可以选择 serverstaticdisabled

  • server:在本地服务器上启动一个分析器,默认在 http://localhost:8888
  • static:生成一个静态的 HTML 文件,默认文件名为 report.html
  • disabled:禁用分析器。

2. 通过命令行使用

你可以在命令行中使用 webpack-bundle-analyzer,通过运行以下命令来生成报告:

npx webpack-bundle-analyzer <path-to-your-stats-file>

 首先,你需要生成 Webpack 的 stats 文件。可以通过在 Webpack 配置中添加 --json 选项来生成:

webpack --json > stats.json

然后运行分析器:

npx webpack-bundle-analyzer stats.json

3. 在 Vue CLI 项目中使用

如果你在使用 Vue CLI 创建的项目,你可以在 vue.config.js 中配置 webpack-bundle-analyzer

// vue.config.js
const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin

module.exports = {
    configureWebpack: {
        plugins: [
            // 配置包分析器
            new BundleAnalyzerPlugin({
                analyzerMode: 'static',
                // analyzerMode: 'server',
                // analyzerMode: 'disabled',
                // analyzerHost: '127.0.0.1',
                // analyzerPort: 8888,
                reportFilename: 'report.html',
                defaultSizes: 'gzip',
                generateStatsFile: true, // 如果为true,则Webpack Stats JSON文件将在bundle输出目录中生成
                openAnalyzer: false, // 默认在浏览器中自动打开报告
                statsFilename: 'stats.json', // 如果generateStatsFile为true,将会生成Webpack Stats JSON文件的名字
                statsOptions: { source: false }
            })
        ]
    }
}

 在 package.json 中,找到 scripts,添加

"analyz": "cross-env NODE_ENV=production vue-cli-service build --mode production",
或
"analyz": "cross-env NODE_ENV=production npm run build",

 然后构建打包,完成后,我们发现在 dist 文件夹里生成了一个 report.html 文件与stats.json 文件

npm run analyz 

这种方式会生成 stats.json 文件(很大,部署时需要移除),除此之外,还能看到每一个文件的 Stat size、Parsed size、Gzipped size三种格式的文件大小

webpack-bundle-analyzer的主要配置项及其作用:

  1. analyzerMode:

    • 类型string
    • 默认值'server'
    • 说明: 指定分析模式。可选值:
      • 'server': 在服务器上启动 HTTP 服务并打开浏览器窗口显示报告(默认)。
      • 'static': 生成一个包含报告的单个 HTML 文件。
      • 'json': 生成 JSON 格式的报告文件。
      • 'disabled': 不生成任何报告或开启服务器。
  2. reportFilename:

    • 类型string
    • 默认值'report.html'
    • 说明: 当 analyzerMode 为 'static' 时,这个选项决定了生成的 HTML 报告文件的名称与路径。
  3. openAnalyzer:

    • 类型boolean
    • 默认值true
    • 说明: 是否在构建完成后自动打开报告页面。
  4. generateStatsFile:

    • 类型boolean
    • 默认值false
    • 说明:是否在生成报告的同时也生成一个 stats.json 文件,该文件包含了打包过程中的详细信息。
  5. statsFilename:

    • 类型string
    • 默认值'stats.json'
    • 说明: : 当 generateStatsFile 设置为 true 时,这个选项用于指定生成的 stats 文件的名称。
  6. statsOptions:

    • 类型object
    • 默认值null
    • 说明: 用于配置生成 stats 文件的选项。可以传入 Webpack 的 Stats 选项,以便定制化包含的信息。
  7. openAnalyzer:

    • 类型boolean
    • 默认值true
    • 说明: 是否在完成构建后自动打开分析报告。
  8. excludeAssets:

    • 类型array
    • 默认值[]
    • 说明: 允许通过正则表达式或函数来排除特定资源不被包含到报告中。
  9. analyzerHostanalyzerPort:

    • 类型number
    • 默认值8888
    • 说明: 分别指定运行本地 HTTP 服务器的主机名和端口。当你选择 'server' 模式时,这些配置将决定你通过哪个地址访问分析报告。
  10. defaultSizes:

    • 类型string
    • 默认值'parsed'
    • 说明: 报告中默认显示的大小类型。可选值:
      • 'stat': 包含原始大小。
      • 'parsed': 包含解析后的大小(即去除了压缩后的大小)。
      • 'gzipped': 包含 Gzip 后的大小。
      • :brotli 压缩后的大小

查看报告

如果你选择了 static 模式,报告将生成在指定的文件中(如 bundle-report.html)。打开文件时,你会看到如下内容:

  • 包大小:每个模块的大小,以及整个应用的总大小。
  • 依赖树:显示各个模块之间的依赖关系,可以展开和收缩查看。
  • 颜色编码:模块的颜色通常表明其大小,帮助你快速识别大包。

解读报告

在分析报告中,你可以找到以下信息:

  1. 模块大小:可以查看各个模块的实际大小,识别出哪些包过大,需要优化。
  2. 依赖关系:可以很直观地看到各个模块是如何相互依赖的,便于理解整个应用的结构。
  3. 第三方库:可以查看第三方库(如 React、Lodash 等)的大小,帮助你决定是否需要使用更轻量的替代库。

优化

根据分析结果,你可以采取以下措施来优化你的打包:

  1. 代码分割:使用动态导入(import())来分割较大的模块,从而按需加载。
  2. 懒加载:将不必要的模块懒加载,只有在需要时再加载它们。
  3. 移除未使用的依赖:检查并删除不再使用的依赖包。
  4. 使用轻量库:如果某些库的大小过大,考虑使用更小的替代库。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2280661.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【深度解析Java 20天速成】04_IDEA的安装与使用

【Why IDEA ?】 【注】JetBrains官方说明&#xff1a; 尽管我们采取了多种措施确保受访者的代表性&#xff0c;但结果可能会略微偏向 JetBrains 产品的用户&#xff0c;因为这些用户更有可能参加调查。 此外&#xff0c;2022年&#xff0c;某美国软件开发商在对近千名专业的Ja…

算法竞赛之差分进阶——等差数列差分 python

目录 前置知识进入正题实战演练 前置知识 给定区间 [ l, r ]&#xff0c;让我们把数组中的[ l, r ] 区间中的每一个数加上c,即 a[ l ] c , a[ l 1 ] c , a[ l 2] c , a[ r ] c; 怎么做&#xff1f;很简单&#xff0c;差分一下即可 还不会的小伙伴点此进入学习 进入正题 …

【HarmonyOS NEXT】华为分享-碰一碰开发分享

关键词&#xff1a;鸿蒙、碰一碰、systemShare、harmonyShare、Share Kit 华为分享新推出碰一碰分享&#xff0c;支持用户通过手机碰一碰发起跨端分享&#xff0c;可实现传输图片、共享wifi等。我们只需调用系统 api 传入所需参数拉起对应分享卡片模板即可&#xff0c;无需对 U…

小程序 -- uni-app开发微信小程序环境搭建(HBuilder X+微信开发者工具)

目录 前言 一 软件部分 1. 微信开发者工具 2. HBuilder X 开发工具 二 配置部分 1. 关于 HBuilder X 配置 2. 关于 微信开发工具 配置 三 运行项目 1. 新建项目 2. 代码编写 3. 内置浏览器 编译 4. 配置小程序 AppID获取 注意 四 实现效果 前言 uni-app开发小程…

Element修改表格结构样式集合(后续实时更新)

场景 修改前端Element组件el-table样式 实现 线表格 <div class"tablepro"><el-table:data"tableData":header-cell-style"{ textAlign:center}"class"tablepro-table"borderstyle"width: 100%;height:100%"&g…

【C++】如何从源代码编译红色警戒2地图编辑器

【C】如何从源代码编译红色警戒2地图编辑器 操作视频视频中的代码不需要下载三方库&#xff0c;已经包含三方库。 一、运行效果&#xff1a;二、源代码来源及编程语言&#xff1a;三、环境搭建&#xff1a;安装红警2安装VS2022下载代码&#xff0c;源代码其实不太多&#xff0c…

[unity 高阶]使用ASE制作一个cubed的skybox的shader,跟做版本

第一步,导入ASE 此步骤不在此讲解,有时间再补充 第二步,创建shader 需要选择shader的类型,此处选择legacy/Unlit第三步,创建变量 根据默认shader中的变量 _Tint (“Tint Color”, Color) = (.5, .5, .5, .5)[Gamma] _Exposure (“Exposure”, Range(0, 8)) = 1.0_Rotat…

雷电9最新版安装Magisk+LSPosd(新手速通)

大家好啊&#xff01;我是NiJiMingCheng 我的博客&#xff1a;NiJiMingCheng 在安卓系统的定制与拓展过程中&#xff0c;获取 ROOT 权限以及安装各类框架是进阶玩家常用的操作&#xff0c;这可以帮助我们实现更多系统层面的个性化功能。今天&#xff0c;我将为大家详细介绍如何…

Spring Boot Starter介绍

前言 大概10来年以前&#xff0c;当时springboot刚刚出现并没有流行&#xff0c;当时的Java开发者们开发Web应用主要是使用spring整合springmvc或者struts、iBatis、hibernate等开发框架来进行开发。项目里一般有许多xml文件配置&#xff0c;其中配置了很多项目中需要用到的Be…

PyTorch使用教程(4)-如何使用torch.nn构建模型?

torch.nn 是 PyTorch 深度学习框架中的一个核心模块&#xff0c;专门用于构建和训练神经网络。它提供了一系列用于构建神经网络所需的组件&#xff0c;包括层&#xff08;Layers&#xff09;、激活函数&#xff08;Activation Functions&#xff09;、损失函数&#xff08;Loss…

Qt之QDjango-db的简单使用

QDjango是一款由C编写、依托于Qt库的Web开发框架&#xff0c;其设计理念受到了广受欢迎的Python框架Django的影响。这个项目旨在提供一个高效、灵活且易于使用的工具集&#xff0c;帮助开发者构建高质量的Web应用。其项目地址: https://gitcode.com/gh_mirrors/qd/qdjango&…

音频入门(二):音频数据增强

本文介绍了一些常见的音频数据增强方法&#xff0c;并给出了代码实现。 目录 一、简介 二、代码 1. 安装必要的库 2. 代码 3. 各函数的介绍 4. 使用方法 参考&#xff1a; 一、简介 音频数据增强是机器学习和深度学习领域中用于改善模型性能和泛化能力的技术。 使用数据…

【C++】引用(上)

1、引用的基本使用 作用&#xff1a;给变量起别名 语法&#xff1a;数据类型&#xff08;该数据类型要与原名的数据类型一致&#xff09; &别名原名&#xff1b; 示例&#xff1a; #include<iostream> using namespace std; int main() {int a 10;int& …

DBeaver下载安装及数据库连接(MySQL)

1. DBeaver下载 官网下载地址:Download | DBeaver Community 2. 安装 1. 双击下载的安装包&#xff0c;选择简体中文。 2. 点击下一步。 3. 点击我接受。 4. 如下勾选为所有用户安装&#xff0c;点击下一步。 5. 需重复做1~3 的步骤。 6. 选择组件&#xff0c;默认即可&…

leetcode 1620. 网络信号最好的坐标

题目如下 数据范围 示例 观察数据范围我们可以看到信号塔最多只有50座而x 与 y范围则是在0到50之间。 如果我们暴力枚举的话计算次数最多51 * 51 * 50时间复杂度即为O&#xff08;n * n * M&#xff09; 显然题目暗示我们使用枚举法通过代码 class Solution { public:vect…

《罗宾逊-旅途VR》Build2108907官方学习版

《罗宾逊-旅途VR》官方版 https://pan.xunlei.com/s/VODiY5gn_fNxKREdVRdwVboCA1?pwdsh3f# 从第一人称的角度进行探索&#xff0c;玩家将遇到一系列恐龙和生物&#xff0c;这些恐龙和生物会对它们在泰森三世生态系统中的存在做出反应。强调与周围环境的互动&#xff0c;鼓励玩…

Leetcode:2239

1&#xff0c;题目 2&#xff0c;思路 循环遍历满足条件就记录&#xff0c;最后返回结果值 3&#xff0c;代码 public class Leetcode2239 {public static void main(String[] args) {System.out.println(new Solution2239().findClosestNumber(new int[]{-4, -2, 1, 4, 8})…

LeetCode:37. 解数独

跟着carl学算法&#xff0c;本系列博客仅做个人记录&#xff0c;建议大家都去看carl本人的博客&#xff0c;写的真的很好的&#xff01; 代码随想录 LeetCode&#xff1a;37. 解数独 编写一个程序&#xff0c;通过填充空格来解决数独问题。 数独的解法需 遵循如下规则&#xff…

FPGA与ASIC:深度解析与职业选择

IC&#xff08;集成电路&#xff09;行业涵盖广泛&#xff0c;涉及数字、模拟等不同研究方向&#xff0c;以及设计、制造、封测等不同产业环节。其中&#xff0c;FPGA&#xff08;现场可编程门阵列&#xff09;和ASIC&#xff08;专用集成电路&#xff09;是两种重要的芯片类型…

Linux内存管理(Linux内存架构,malloc,slab的实现)

文章目录 前言一、Linux进程空间内存分配二、malloc的实现机理三、物理内存与虚拟内存1.物理内存2.虚拟内存 四、磁盘和物理内存区别五、页页的基本概念&#xff1a;分页管理的核心概念&#xff1a;Linux 中分页的实现&#xff1a;总结&#xff1a; 六、伙伴算法伙伴算法的核心…