Vue Element ui webpack 打包文件过大

本文介绍了一次Vue项目中登录模块打包体积优化的过程,通过排查发现elementui的不当引入导致体积过大,最终通过调整引用方式成功将体积从740KB减小到145KB。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天撸完登录模块,打包的时候发现,单一个登录页面打包完的体积竟然达到了740KB!
这里写图片描述
这里写图片描述
模块是基于Vue全家桶 + element ui编写的,但即使全引入使用,也不应该达到这么夸张的一个体积。

事出反常必有妖,用Cli初始化项目时附带的webpack-bundle-analyzer查看打包情况,添加一个scripts"analyz": "set NODE_ENV=production && set npm_config_report=true && npm run dist",然后执行npm run analyz,得出如下结果
这里写图片描述
由此可见问题出在element ui上面。

经过一番排查,将问题定位在
这里写图片描述
这一个为了方便拓展和统一行为,将通知组件封装起来的js文件里面。

通过@element-ui/src/index.js的代码分析,有可能在独立的js文件引用的时候将整个element ui库再引用了一遍,所以由此入手进行改造引用方式
这里写图片描述

然后重新打包
这里写图片描述

直接减少到了145KB!!
这里写图片描述

其他组件在独立js引用的时候应该也是如此。
希望能帮助大家避免踩坑。

### Vue 项目中集成 Element UI 和 Cesium 并使用 Webpack 构建 #### 安装依赖包 为了在 Vue 中集成 Element UI 和 Cesium,首先需要利用 `npm` 来安装必要的库。对于 Cesium 的安装可以通过命令 `npm install cesium --save` 实现[^1]。 #### 修改 Webpack 配置 针对 Cesium 的特殊需求,在基于 Vue CLI 创建的项目里可能需要调整默认的 Webpack 设置来支持 Cesium 正常工作。这通常涉及到编辑项目的 `vue.config.js` 文件而不是直接改动 `webpack.base.conf.js`,因为后者更倾向于被 Vue CLI 内部管理[^2]。具体来说: - **配置别名**:为了让导入路径更加简洁明了,可以设置 alias 让 @ 指向 src 目录。 - **优化资源加载**:由于 Cesium 自带量静态资源(如图片、字体),建议启用 file-loader 或 url-loader 处理这些文件;同时考虑使用 externals 排除不必要的打包项以减小最终 bundle 的体积。 ```javascript // vue.config.js 示例片段 module.exports = { configureWebpack: { resolve: { alias: { '@': path.resolve(__dirname, 'src') } }, module: { rules: [ // 添加处理 .b3dm/.pnts 等三维模型格式的支持 { test: /\.(b3dm|pnts)$/, loader: "file-loader", options: {} } ] }, externals: { cesium: 'Cesium' } } }; ``` #### 主应用入口文件 main.js 调整 除了上述提到的引入 Cesium 样式的操作外,还需要确保全局注册 Element UI 组件以便于后续页面开发时可以直接调用[^4]。 ```javascript import Vue from 'vue'; import App from './App.vue'; // 引入并注册 ElementUI import ElementUI from 'element-ui'; import 'element-ui/lib/theme-chalk/index.css'; Vue.use(ElementUI); // 引入 Cesium 样式表以及初始化 Cesium 变量 import 'cesium/Build/Cesium/Widgets/widgets.css'; window.CESIUM_BASE_URL = '/path/to/your/static/resources/'; let Cesium = require('cesium/Cesium'); new Vue({ render: h => h(App), }).$mount('#app'); ``` #### 页面组件内实现功能逻辑 最后一步是在具体的 `.vue` 单文件组件内部编写业务代码,比如 HelloWorld.vue 中就可以尝试创建一个简单的 globe viewer 展示地球仪效果。 ```html <template> <div id="viewerContainer"></div> </template> <script> export default { name: 'HelloWorld', mounted() { const viewer = new this.$root.Cesium.Viewer('viewerContainer', {}); } }; </script> <style scoped> #viewerContainer { width: 100%; height: calc(100vh - var(
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值