当前位置: 首页 > news >正文

Vue2项目集成打包分析工具webpack-bundle-analyzer

在 Vue2 项目中集成 webpack-bundle-analyzer 可以帮助你可视化分析打包后的资源构成,找出体积过大的模块,从而进行优化。以下是具体实现步骤:

1. 安装依赖

首先安装 webpack-bundle-analyzer 作为开发依赖:

npm install webpack-bundle-analyzer --save-dev
# 或 yarn add webpack-bundle-analyzer -D

2. 在 vue.config.js 中配置插件

修改你的 vue.config.js,通过环境变量控制是否启用分析插件(避免影响正常构建):

'use strict'
const path = require('path')
const webpack = require('webpack')
// 引入分析插件
const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPluginfunction resolve(dir) {return path.join(__dirname, dir)
}const name = process.env.VUE_APP_TITLE || '冲锋衣企业管理后台'
const port = process.env.port || process.env.npm_config_port || 80// 判断是否需要启用分析插件(通过环境变量控制)
const isAnalyze = process.env.ANALYZE === 'true'module.exports = {publicPath: process.env.NODE_ENV === "production" ? "/" : "/",outputDir: 'dist',assetsDir: 'static',lintOnSave: process.env.NODE_ENV === 'development',productionSourceMap: false,devServer: {host: '0.0.0.0',port: port,open: true,proxy: {[process.env.VUE_APP_BASE_API]: {target: 'http://sanmencfy.com:7081/jyou-sm-admin',changeOrigin: true,pathRewrite: {['^' + process.env.VUE_APP_BASE_API]: ''}}},disableHostCheck: true},configureWebpack: {name: name,resolve: {alias: {'@': resolve('src')}},plugins: [new webpack.ProvidePlugin({'window.Quill': 'quill/dist/quill.js',Quill: 'quill/dist/quill.js'}),// 仅在需要分析时添加插件...(isAnalyze ? [new BundleAnalyzerPlugin()] : [])]},chainWebpack(config) {// 已有的 chainWebpack 配置...config.plugins.delete('preload')config.plugins.delete('prefetch')config.module.rule('svg').exclude.add(resolve('src/assets/icons')).end()config.module.rule('icons').test(/\.svg$/).include.add(resolve('src/assets/icons')).end().use('svg-sprite-loader').loader('svg-sprite-loader').options({symbolId: 'icon-[name]'}).end()config.module.rule('css').oneOf('tailwind').test(/TailwindPage.*\.css$/).use('postcss-loader').loader('postcss-loader').options({postcssOptions: {config: path.resolve(__dirname, 'postcss.config.js')}}).tap(options => {options = options || {}options.postcssOptions = options.postcssOptions || {plugins: []}return options}).end().end()config.module.rule('css').oneOf('normal').exclude.add('/TailwindPage/').end()config.when(process.env.NODE_ENV !== 'development',config => {config.plugin('ScriptExtHtmlWebpackPlugin').after('html').use('script-ext-html-webpack-plugin', [{inline: /runtime\..*\.js$/}]).end()config.optimization.splitChunks({chunks: 'all',cacheGroups: {libs: {name: 'chunk-libs',test: /[\\/]node_modules[\\/]/,priority: 10,chunks: 'initial'},elementUI: {name: 'chunk-elementUI',priority: 20,test: /[\\/]node_modules[\\/]_?element-ui(.*)/},commons: {name: 'chunk-commons',test: resolve('src/components'),minChunks: 3,priority: 5,reuseExistingChunk: true}}})config.optimization.runtimeChunk('single'),{from: path.resolve(__dirname, './public/robots.txt'),to: './'}})}
}

3. 在 package.json 中添加分析脚本

scripts 中添加一个专门用于分析的命令,通过环境变量 ANALYZE=true 触发插件:

{"scripts": {"dev": "vue-cli-service serve","build:prod": "vue-cli-service build","build:stage": "vue-cli-service build --mode staging","preview": "node build/index.js --preview","lint": "eslint --ext .js,.vue src",// 新增:运行此命令将构建并分析打包结果"analyze": "cross-env ANALYZE=true vue-cli-service build"}
}

如果没有 cross-env,需要先安装(用于跨平台设置环境变量):

npm install cross-env --save-dev

4. 运行分析命令

执行以下命令,构建完成后会自动打开浏览器展示分析结果:

npm run analyze

分析结果说明

运行后会生成一个交互式的分析页面,主要功能:

  • 以树状图/太阳图展示各个模块的体积占比
  • 鼠标悬停可查看具体文件的大小
  • 支持搜索特定模块
  • 可点击模块查看依赖关系

通过分析结果,你可以:

  • 发现体积过大的第三方库(如 element-uiecharts 等),考虑按需引入
  • 识别重复打包的模块,通过 splitChunks 优化
  • 检查是否有不必要的依赖被打包进来

注意事项

  • analyze 命令会同时执行 build,生成生产环境的 dist 目录
  • 分析插件仅在 ANALYZE=true 时启用,不影响正常的 builddev 命令
  • 如果构建速度变慢,可暂时关闭分析功能

通过这种方式,你可以直观地了解项目打包后的资源分布,针对性地进行性能优化。


文章转载自:

http://xboG7Aw3.gynkr.cn
http://WPtlcQzf.gynkr.cn
http://Tc4pQrs6.gynkr.cn
http://rQhgt9iR.gynkr.cn
http://l6PGsyr7.gynkr.cn
http://1ABcDMlv.gynkr.cn
http://v69yFX21.gynkr.cn
http://0W0dioW9.gynkr.cn
http://NmKBWvJy.gynkr.cn
http://OMswt0Mi.gynkr.cn
http://NMiJ9vjP.gynkr.cn
http://xfn2QawZ.gynkr.cn
http://6E3PbhQc.gynkr.cn
http://XmEfo1Xw.gynkr.cn
http://6om1KaPQ.gynkr.cn
http://xnNJp2gE.gynkr.cn
http://93bXBuO7.gynkr.cn
http://wQwGuT3E.gynkr.cn
http://blyD59kD.gynkr.cn
http://QwfX4m4p.gynkr.cn
http://MrBBuwGw.gynkr.cn
http://FExycOoy.gynkr.cn
http://4Yp5BbWd.gynkr.cn
http://6JYeWi58.gynkr.cn
http://OcjHWfDo.gynkr.cn
http://BEmks92V.gynkr.cn
http://qH6d0Ama.gynkr.cn
http://TEjp5b1P.gynkr.cn
http://jAEZhZZA.gynkr.cn
http://PUfCKEMO.gynkr.cn
http://www.dtcms.com/a/387556.html

相关文章:

  • 【阶梯波发生器如何控制电压和周期】2022-12-9
  • Java 设计模式之桥接模式(Bridge Pattern)
  • Android 端启动 HTTP 服务:从基础实现到实战应用
  • 《2D横版平台跳跃游戏中角色二段跳失效与碰撞体穿透的耦合性Bug解析》
  • 基于本机知识库 + 豆包(火山引擎)+ MCP的落地方案
  • OpenCV 风格迁移、DNN模块 案例解析及实现
  • php实现火山引擎 【双向流式websocket-V3-支持复刻2.0/混音mix】开箱即用,可用于各种PHP框架。
  • 【lua】Windows环境下cffi-lua使用指南:编译、安装与测试
  • 我优化了昨天的C++/Lua插件系统:添加了插件沙箱、Lua 状态池
  • 【数据库】SQLite安装部署与使用指南
  • Android Kotlin 请求方法代码
  • 【easy_tools】一个跨平台裸机工具库,包含任务/堆栈/消息/定时器/日志等实现
  • ARM(11) - LM75
  • FPGA实现SRIO数据回环传输,基于Serial Rapidlo Gen2架构,提供6套工程源码和技术支持
  • 第十九章 Arm C1-Premium TRBE技术解析
  • HTB writeup
  • 科学研究系统性思维的理论基础:数字化研究工具
  • 基于有限元-元胞自动机法(CAFE)的增材制造过程组织模拟
  • 电视行业复兴,数字化制造如何重塑“视界”新格局?
  • 从兼容到极致性能——qData数据中台商业版核心指标解读
  • MAC-枚举反射工具类
  • 搜索百科(1):Lucene —— 打开现代搜索世界的第一扇门
  • 学习日记-JS+DOM-day57-9.17
  • Java异常处理最佳实践指南
  • Ansible简介
  • pytest使用总结笔记
  • 在VSCode中设置Qt开发环境
  • 斜杠命令Slash Commands:Roo Code 的自动化利器
  • 大数据毕业设计选题推荐-基于大数据的慢性肾病数据可视化分析系统-Spark-Hadoop-Bigdata
  • 基于红尾鹰优化的LSTM深度学习网络模型(RTH-LSTM)的一维时间序列预测算法matlab仿真