nodejs 010:Webpack 可视化分析插件 webpack-bundle-analyzer的使用

news2024/11/15 22:37:31

安装

  • yarn add --dev webpack-bundle-analyzer

原始webpack.config.js

  • 代码定义了 Webpack 的配置,主要任务是将 JavaScript 和 CSS 文件打包,并将 CSS 提取到单独的文件中,配置了对 Electron 应用的支持,同时还将 React 相关的模块映射到 Preact,以减小打包体积。
// 引入 Node.js 的 path 模块,用于处理文件和目录路径
const path = require('path');
// 引入webpack的 ExtractTextPlugin 插件,用于将 CSS 提取到单独的文件中
// 打包样式有两种方法,一种是使用style-loader自动将css代码放到生成的style标签中,并且插入到head标签里。另一种就是使用extract-text-webpack-plugin插件,将样式文件单独打包,打包输出的文件由配置文件中的output属性指定。然后我们在入口HTML页面写个link标签引入这个打包后的样式文件
// extract-text-webpack-plugin用法 https://segmentfault.com/a/1190000018134652
const ExtractTextPlugin = require('extract-text-webpack-plugin');

// 实例化 ExtractTextPlugin 插件,配置 CSS 文件的输出路径和名称
const extractCSSPlugin = new ExtractTextPlugin({
    filename: 'css/[name].css', // CSS 文件将被输出到 'css' 目录下,文件名与入口文件名称相同
    allChunks: true, // 提取所有的 CSS,包括异步加载的 CSS
});

module.exports = {
    // 指定 Webpack 的入口文件,Webpack 将从这个文件开始构建依赖图
    entry: path.resolve(__dirname, 'src', 'ui', 'index.js'), // 入口文件路径为 'src/ui/index.js'
    
    output: {
        // 配置 Webpack 打包后的输出文件
        filename: 'js/bundle.js', // 输出的 JavaScript 文件名称为 'bundle.js',存放在 'js' 目录下
        path: path.resolve(__dirname, 'src', 'static'), // 输出目录为 'src/static'
    },
    
    target: 'electron', // 指定构建目标为 Electron 应用

    module: {
        // 配置如何处理不同类型的模块
        rules: [
            {
                test: /\.(js|jsx)$/, // 匹配所有 JavaScript 和 JSX 文件
                loader: 'babel-loader', // 使用 babel-loader 处理这些文件
                include: [
                    path.resolve(__dirname, 'src', 'ui'), // 仅处理 'src/ui' 目录下的文件
                ],
            },
            {
                test: /\.(css|scss)$/, // 匹配所有 CSS 和 SCSS 文件
                loader: extractCSSPlugin.extract({
                    use: [
                        {
                            loader: 'css-loader', // 使用 css-loader 解析 CSS 文件
                            options: {
                                modules: true, // 启用 CSS 模块化,允许在 CSS 文件中使用局部作用域
                                importLoaders: 2, // 在处理 CSS 文件时,前两个加载器也会被使用
                                localIdentName: '[name]--[local]___[hash:base64:5]', // CSS 类名的命名规则
                            },
                        },
                    ],
                }),
            },
        ],
    },
    
    resolve: {
        // 配置模块解析规则
        alias: {
            'react': 'preact-compat', // 将 'react' 映射到 'preact-compat',以便使用 Preact 替代 React
            'react-dom': 'preact-compat', // 将 'react-dom' 映射到 'preact-compat'
        },
        modules: [
            path.resolve(__dirname, 'node_modules'), // 解析模块时首先从 'node_modules' 查找
            path.resolve(__dirname, 'src', 'ui'), // 然后从 'src/ui' 查找
            path.resolve(__dirname, 'src', 'electron'), // 还可以从 'src/electron' 查找
        ],
        extensions: ['.js', '.jsx', '.json'], // 解析模块时支持的文件扩展名
    },
    
    plugins: [extractCSSPlugin], // 使用 ExtractTextPlugin 插件来提取 CSS
};

使用webpack-bundle-analyzer

const path = require('path');
const ExtractTextPlugin = require('extract-text-webpack-plugin');
const extractCSSPlugin = new ExtractTextPlugin({
    filename: 'css/[name].css',
    allChunks: true,
});
// 1.引入webpack的 BundleAnalyzerPlugin 插件
const { BundleAnalyzerPlugin } = require('webpack-bundle-analyzer');
const bundleAnalyzerPlugin = new BundleAnalyzerPlugin();


module.exports = {
    entry: path.resolve(__dirname, 'src', 'ui', 'index.js'),
    output: {
        filename: 'js/bundle.js',
        path: path.resolve(__dirname, 'src', 'static'),
    },
    target: 'electron',
    module: {
        rules: [
            {
                test: /\.(js|jsx)$/,
                loader: 'babel-loader',
                include: [
                    path.resolve(__dirname, 'src', 'ui'),
                ],
            },
            {
                test: /\.(css|scss)$/,
                loader: extractCSSPlugin.extract({
                    use: [
                        {
                            loader: 'css-loader',
                            options: {
                                modules: true,
                                importLoaders: 2,
                                localIdentName: '[name]--[local]___[hash:base64:5]',
                            },
                        },
                    ],
                }),
            },
        ],
    },
    resolve: {
        alias: {
            'react': 'preact-compat',
            'react-dom': 'preact-compat',
        },
        modules: [
            path.resolve(__dirname, 'node_modules'),
            path.resolve(__dirname, 'src', 'ui'),
            path.resolve(__dirname, 'src', 'electron'),
        ],
        extensions: ['.js', '.jsx', '.json'],
    },
    plugins: [extractCSSPlugin,bundleAnalyzerPlugin], // 2.注册BundleAnalyzerPlugin插件
};

可视化结果

PS C:\Users\kingchuxing\Documents\IPFS\party\Partyshare-master> npx webpack
…………
Webpack Bundle Analyzer is started at http://127.0.0.1:8888
Use Ctrl+C to close it

在这里插入图片描述

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

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

相关文章

Blue Screen of Death(BSOD)

Blue Screen of Death(BSOD)蓝屏 进来就是蓝屏。。。 按【电源】开关,连续三次 然后非常非常慢,启动了十几分钟 svchost (30028,R,98) TILEREPOSITORYS-1-5-18: 打开日志文件 C:\WINDOWS\system32\config\systemprofile\AppData…

6、定义字段状态变式

定义解释 字段状态变式是分配给公司代码的一项重要参数,在字段状态变式中罗列了很多字段状态组,而字段状态组是会计科目中的一个重要参数.它控制在输入一张会计记帐凭证时,该科目的那些辅助核算项目是必须输入的,哪些是不允许输入的,哪些是可以选择的 重点:科目组…

Adobe After Effects的插件--------Shatter 碎片

Shatter是AE的内置插件,其可模拟爆炸、破碎效果。 该效果将【效果图层】细化成一个个【碎片单体】,当爆破时这些【碎片单体】将被冲击,从【效果图层】上滑落。 视图 用不同的方式显示【效果图层】,以便调试。值有: 已渲染:显示【效果图层】的源图层线框正视图:只显示【…

SOCKS4和SOCKS5的区别是什么?

SOCKS4和SOCKS5是两种常用的网络代理协议,它们在功能、性能和应用场景上存在一些关键的区别。以下是对这两种协议区别的详细解析: 1. 支持的协议类型 SOCKS4:只支持TCP协议(传输控制协议)。这意味着SOCKS4代理只能用…

在vmvare安装飞牛私有云 fnOS体验教程

飞牛私有云(fnOS)是由飞牛网(Feiniu)开发的一款私有云操作系统,旨在为企业提供高效、安全、可扩展的云计算解决方案。 官网地址:https://www.fnnas.com/ 本章教程,主要介绍如何通过vmvare安装使…

Node.js 学习

目录 1.Node.js入门 1.1 什么是 Node.js 1.2 fs模块-读写文件 1.3 path模块-路径处理 1.4 案例-压缩前端html 1.5 认识URL中的端口号 1.6 http模块-创建Web服务 1.7 案例-浏览时钟 2.Node.js 模块化 2.1 模块化简介 2.1.1 什么是模块化? 2.1.2 CommonJS…

C++_类和对象(中、下篇)—— const成员函数、取地址运算符的重载、深入构造函数、类型转换、static成员、友元

目录 三、类和对象(中) 6、取地址运算符重载 1、const成员函数 2、取地址运算符的重载 四、类和对象(下) 1、深入构造函数 2、类型转换 3、static成员 4、友元 三、类和对象(中) 6、取地址运算…

从数据仓库到数据中台再到数据飞轮:我了解的数据技术进化史

这里写目录标题 前言数据仓库:数据整合的起点数据中台:数据共享的桥梁数据飞轮:业务与数据的双向驱动结语 前言 在当今这个数据驱动的时代,企业发展离不开对数据的深度挖掘和高效利用。从最初的数据仓库,到后来的数据…

docker可视化管理工具推荐!docker.ui

正式介绍之前,可以看下这款工具的截图,开源地址在文末提供: docker.ui:一个可视化的docker管理工具 docker是一个开源的容器平台,可以让开发者和运维人员快速地构建、运行和部署应用。 docker的优势在于它可以实现应…

Cpp类和对象(上)(3)

文章目录 前言一、面向过程与面向对象初步认识二、类的引入三、类的定义四、类的访问限定符及类的封装类的访问限定符类的封装 五、类的作用域(类域)六、类的实例化七、类对象模型如何计算类对象的大小类对象的存储方式猜测 八、this指针this指针的引出this指针的特性 九、C语言…

dcmtk在MWLSCP会忽略对于字符集的匹配

版本信息 dcmtk v3.6.4 2018-11-29 发现的原因 在我将dcmtk的wlmscpfs当作MWLSCP使用的时候,我在SCU端为了防止过来的数据中存在不识别的字符集,对于收到的数据数据进行了字符集的过滤,但是发现过滤没有生效。 确保数据源 首先需要确认数…

pywebview 中错误使用async

错误代码 正确示例 完整代码 前端代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>pywebview …

哈希表数据结构学习

哈希表数据结构学习 哈希表基本概念哈希方法单值哈希与多值哈希哈希冲突1. 开放寻址法&#xff08;Open Addressing&#xff09;2. 链地址法&#xff08;Chaining&#xff09;3. 再哈希法&#xff08;Rehashing&#xff09;4. 建立公共溢出区&#xff08;Overflow Area&#xf…

OpenHarmony(鸿蒙南向开发)——标准系统方案之瑞芯微RK3568移植案例(下)

往期知识点记录&#xff1a; OpenHarmony&#xff08;鸿蒙南向开发&#xff09;——轻量系统STM32F407芯片移植案例 OpenHarmony&#xff08;鸿蒙南向开发&#xff09;——Combo解决方案之W800芯片移植案例 OpenHarmony&#xff08;鸿蒙南向开发&#xff09;——小型系统STM32M…

『功能项目』窗口可拖拽脚本【59】

本章项目成果展示 我们打开上一篇58第三职业弓弩的平A的项目&#xff0c; 本章要做的事情是给坐骑界面挂载一个脚本让其显示出来的时候可以进行拖拽 创建脚本&#xff1a;DraggableWindow.cs using UnityEngine; using UnityEngine.EventSystems; public class DraggableWindo…

使用three.js+vue3完成无人机上下运动

效果图如上 代码&#xff1a; <template><div class"drones"><div ref"dronesContainer" class"drones-container"></div></div></template><script setup>import { ref, onMounted, onUnmounted, …

性能再升级,华为Mate 70 Pro曝光,设计新颖且配置遥遥领先

在智能手机市场竞争日益激烈的今天&#xff0c;各大厂商都在努力提升自家产品的性能和设计。 华为作为中国领先的手机品牌&#xff0c;一直备受关注。 近日&#xff0c;有关华为Mate 70 Pro的曝光信息引发了广泛关注&#xff0c;据悉&#xff0c;这款新机将在性能、设计和配置…

vue和thinkphp路由伪静态配置

vue路由伪静态配置&#xff1a; location / { try_files $uri $uri/ /index.html; } thinkphp 路由伪静态配置 location ~* (runtime|application)/{ return 403; } location / { if (!-e $request_filename){ rewrite ^(.*)$ /index.php?s$1 last; break; } }

【Java】基础语法介绍

目录 一、注释 二、标识符与关键字 三、输入和输出 3.1 输出 3.2 输入 四、数据类型 3.1 基本数据类型 3.2 引用数据类型 3.3 var关键字 五、运算符 六、分支和循环 5.1 分支 5.2 循环 七、类和对象 6.1 类的定义与对象的创建 6.2 空对象 6.3 类的属性 6.4 类…

优化下载性能:使用Python多线程与异步并发提升下载效率

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 文章内容 📒📝 普通请求下载📝 使用多线程加速下载📝 使用异步编程加速下载📝 总结 📝⚓️ 相关链接 ⚓️📖 介绍 📖 你是否因为下载速度慢而感到焦虑?特别是在下载大型文件时,等待进度条慢慢移动的感觉真的很…