包文件分析器 Webpack Bundle Analyzer

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').BundleAnalyzerPluginmodule.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.rhkb.cn/news/5087.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

BEVFusion论文阅读

1. 简介 融合激光雷达和相机的信息已经变成了3D目标检测的一个标准&#xff0c;当前的方法依赖于激光雷达传感器的点云作为查询&#xff0c;以利用图像空间的特征。然而&#xff0c;人们发现&#xff0c;这种基本假设使得当前的融合框架无法在发生 LiDAR 故障时做出任何预测&a…

二十七、资源限制-LimitRange

LimitRange生产必备 在调度的时候 requests 比较重要,在运行时 limits 比较重要。 一、产生原因 生产中只有ResourceQuota是不够的 只配置ResourceQuotas的情况下,pod的yaml文件没有配置resources配置,都是0的话,就可以无限配置,永远达不到limit LimitRange做了什么 如…

计算机网络 (54)系统安全:防火墙与入侵检测

前言 计算机网络系统安全是确保网络通信和数据不受未经授权访问、泄露、破坏或篡改的关键。防火墙和入侵检测系统&#xff08;IDS&#xff09;是维护网络系统安全的两大核心组件。 一、防火墙 定义与功能 防火墙是一种用来加强网络之间访问控制的特殊网络互联设备&#xff0c;它…

鸿蒙Harmony json转对象(1)

案例1 运行代码如下 上图的运行结果如下: 附加1 Json_msg interface 案例2 import {JSON } from kit.ArkTS; export interface commonRes {status: numberreturnJSON: ESObject;time: string } export interface returnRes {uid: stringuserType: number; }Entry Component …

光谱相机在智能冰箱的应用原理与优势

食品新鲜度检测 详细可点击查看汇能感知团队实验报告&#xff1a;高光谱成像技术检测食物新鲜度 检测原理&#xff1a;不同新鲜程度的食品&#xff0c;其化学成分和结构会有所不同&#xff0c;在光谱下的反射、吸收等特性也存在差异。例如新鲜肉类和蔬菜中的水分、蛋白质、叶…

BottomNavigationBar组件的用法

文章目录 1 概念介绍2 使用方法3 示例代码 我们在上一章回中介绍了TextField Widget,本章回中将介绍BottomNavigationBar Widget。闲话休提&#xff0c;让我们一起Talk Flutter吧。 1 概念介绍 我们在本章回中将介绍一个新的Widget:BottomNavigationBar&#xff0c;它就是我们…

总结5..

#include<stdio.h> struct nb {//结构体列队 int x, y;//x为横坐标&#xff0c;y为纵坐标 int s, f;//s为步数&#xff0c;//f为方向 }link[850100]; int n, m, x, y, p, q, f; int hard 1, tail 1; int a[52][52], b[52][52], book[52][52][91]; int main() { …

媒体新闻发稿价格怎么算?移动端发稿价格低的原因有哪些?

对于有过一定发稿经历的朋友&#xff0c;面对不同媒体新闻渠道的发稿价格肯定有所疑惑。尤其同一家媒体&#xff0c;移动端经常比网页端投放渠道的价格要低。到底有哪些方面的原因&#xff0c;导致了这一情况&#xff1f;就让小编来分享下自己的发稿经验。 一、内容展示效果 考…

【Linux系统编程】—— 从零开始实现一个简单的自定义Shell

文章目录 什么是自主shell命令行解释器&#xff1f;实现shell的基础认识全局变量的配置初始化环境变量实现内置命令&#xff08;如 cd 和 echo&#xff09;cd命令&#xff1a;echo命令&#xff1a; 构建命令行提示符获取并解析用户输入的命令执行内置命令与外部命令Shell的主循…

html,css,js的粒子效果

这段代码实现了一个基于HTML5 Canvas的高级粒子效果&#xff0c;用户可以通过鼠标与粒子进行交互。下面是对代码的详细解析&#xff1a; HTML部分 使用<!DOCTYPE html>声明文档类型。<html>标签内包含了整个网页的内容。<head>部分定义了网页的标题&#x…

.Net Core微服务入门系列(一)——项目搭建

系列文章目录 1、.Net Core微服务入门系列&#xff08;一&#xff09;——项目搭建 2、.Net Core微服务入门全纪录&#xff08;二&#xff09;——Consul-服务注册与发现&#xff08;上&#xff09; 3、.Net Core微服务入门全纪录&#xff08;三&#xff09;——Consul-服务注…

【JavaSE】(8) String 类

一、String 类常用方法 1、构造方法 常用的这4种构造方法&#xff1a;直接法&#xff0c;或者传参字符串字面量、字符数组、字节数组。 在 JDK1.8 中&#xff0c;String 类的字符串实际存储在 char 数组中&#xff1a; String 类也重写了 toString 方法&#xff0c;所以可以直…

Linux-C/C++--深入探究文件 I/O (下)(文件共享、原子操作与竞争冒险、系统调用、截断文件)

经过上一章内容的学习&#xff0c;了解了 Linux 下空洞文件的概念&#xff1b;open 函数的 O_APPEND 和 O_TRUNC 标志&#xff1b;多次打开同一文件&#xff1b;复制文件描述符&#xff1b;等内容 本章将会接着探究文件IO&#xff0c;讨论如下主题内容。  文件共享介绍&…

npm run dev 时直接打开Chrome浏览器

package.json 修改下配置 "scripts": {"dev": "vite --open chrome.exe",......}, "dev": "vite" 修改为 "dev": "vite --open chrome.exe" 这样方便一点&#xff0c;省得每次去点调试窗口的链接

微软预测 AI 2025,AI Agents 重塑工作形式

1月初&#xff0c;微软在官网发布了2025年6大AI预测&#xff0c;分别是&#xff1a;AI模型将变得更加强大和有用、AI Agents将彻底改变工作方式、AI伴侣将支持日常生活、AI资源的利用将更高效、测试与定制是开发AI的关键以及AI将加速科学研究突破。 值得一提的是&#xff0c;微…

《从入门到精通:蓝桥杯编程大赛知识点全攻略》(五)-数的三次方根、机器人跳跃问题、四平方和

本博客将详细探讨如何通过二分查找算法来解决这几个经典问题。通过几个实际的例子&#xff0c;我们将展示如何在这些问题中灵活应用二分查找&#xff0c;优化计算过程&#xff0c;并在面对大数据量时保持高效性。 目录 前言 数的三次方根 算法思路 代码如下 机器人跳跃问题…

微服务知识——4大主流微服务架构方案

文章目录 1、微服务聚合模式2、微服务共享模式3、微服务代理模式4、微服务异步消息模式 微服务是大型架构的必经之路&#xff0c;也是大厂重点考察对象&#xff0c;下面我就重点详解4大主流微服务架构方案。 1、微服务聚合模式 微服务聚合设计模式&#xff0c;解决了如何从多个…

麒麟操作系统服务架构保姆级教程(十三)tomcat环境安装以及LNMT架构

如果你想拥有你从未拥有过的东西&#xff0c;那么你必须去做你从未做过的事情 之前咱们学习了LNMP架构&#xff0c;但是PHP对于技术来说确实是老掉牙了&#xff0c;PHP的市场占有量越来越少了&#xff0c;我认识一个10年的PHP开发工程师&#xff0c;十年工资从15k到今天的6k&am…

游戏AI,让AI 玩游戏有什么作用?

让 AI 玩游戏这件事远比我们想象的要早得多。追溯到 1948 年&#xff0c;图灵和同事钱伯恩共同设计了国际象棋程序 Turochamp。之所以设计这么个程序&#xff0c;图灵是想说明&#xff0c;机器理论上能模拟人脑能做的任何事情&#xff0c;包括下棋这样复杂的智力活动。 可惜的是…

Golang的文件处理优化策略

Golang的文件处理优化策略 一、Golang的文件处理优化策略概述 是一门效率高、易于编程的编程语言&#xff0c;它的文件处理能力也非常强大。 在实际开发中&#xff0c;需要注意一些优化策略&#xff0c;以提高文件处理的效率和性能。 本文将介绍Golang中的文件处理优化策略&…