惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

大猫的无限游戏
大猫的无限游戏
博客园 - 【当耐特】
Cloudbric
Cloudbric
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Attack and Defense Labs
Attack and Defense Labs
爱范儿
爱范儿
The Cloudflare Blog
腾讯CDC
Security Archives - TechRepublic
Security Archives - TechRepublic
TaoSecurity Blog
TaoSecurity Blog
云风的 BLOG
云风的 BLOG
Recent Announcements
Recent Announcements
C
Check Point Blog
Schneier on Security
Schneier on Security
S
Schneier on Security
J
Java Code Geeks
B
Blog RSS Feed
Cisco Talos Blog
Cisco Talos Blog
Vercel News
Vercel News
Stack Overflow Blog
Stack Overflow Blog
博客园_首页
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
A
About on SuperTechFans
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Google DeepMind News
Google DeepMind News
阮一峰的网络日志
阮一峰的网络日志
罗磊的独立博客
A
Arctic Wolf
S
Secure Thoughts
P
Palo Alto Networks Blog
The Last Watchdog
The Last Watchdog
SecWiki News
SecWiki News
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
博客园 - 三生石上(FineUI控件)
D
Darknet – Hacking Tools, Hacker News & Cyber Security
量子位
U
Unit 42
I
InfoQ
D
DataBreaches.Net
P
Privacy International News Feed
T
Troy Hunt's Blog
博客园 - 叶小钗
T
Threatpost
博客园 - Franky
K
Kaspersky official blog
Hugging Face - Blog
Hugging Face - Blog
IT之家
IT之家
www.infosecurity-magazine.com
www.infosecurity-magazine.com
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
C
Cisco Blogs

博客园_首页

Plist 二进制格式 Milvus 和 PGVector,哪个更好? OpenClaw 已过时?在 VS Code 中运行 Hermes Agent! 第30篇文章:一个大三计科生的自白 Manim如何在数学公式中完美显示中文? Docker 部署 RocketMQ 5 并发编程核心概念辨析 C#事务处理最佳实践:别再让“主表存了、明细丢了”的破事发生 CLI 是什么?为什么大厂突然集体卷命令行? 【从0到1构建一个ClaudeAgent】协作-自主Agent UIImageView 设置图片不生效的原因排查 最小二乘问题详解20:无先验约束下的增量式SFM自由网平差 痞子衡嵌入式:大话双核i.MXRT1180之XIP应用里借助MU实现可靠Flash IAP的方法 AI Chat 封装, SemanticKerne.AiProvider.Unified 已发布 Windows下右键编辑js文件无法打开记事本——在注册表中使用环境变量 在后台服务中使用 Scoped 服务,为什么总是报错? H200 安装驱动并使用sglang启动模型 wireshark 抓包Trap上报告警内容 我用 AI 辅助开发了一系列小工具(2):图片压缩工具 [A Primer On MC and CC] 2.1 Memory Consistency 1 - 指令重排序和 SC 模型 Oracle数据库SCN推进技术详解与实践指南 玩转控件:封装个带图片的Label控件 Claude Code 4.7 真正该升级的不是模型,而是你的工作流 前端小白一句话,AI 帮我做了个颜值拉满的桌面媒体播放器。当代码不再是门槛,一句话编程就是现实。 5. WorkBuddy: 小龙虾的灵魂三件套,让你的小龙虾不只是工具 SQLite 分片方案实战:三种分片策略的深度对比 告别简陋 UI!一款基于 Fluent Design 和基于 WinUI 的开源免费、现代化的 Avalonia UI 控件库 关于二进制排列组合枚举的总结 AI开发-python-LangGraph框架(3-27-LangGraph从零实现大模型智能决策工作流) ElasticSearch主分片和副本分片概念详解 【002】HTTPS 粗解:证书、TLS 握手与对后端配置的影响 Hermes Agent 一周暴涨五万 Star,但我劝你别急着追 明明连接的是Redis的DB0,为什么能查到DB3的数据? 【从0到1构建一个ClaudeAgent】协作-Agent团队 熟悉电子元器件之后,电子小白下一步该怎么走? MAF快速入门(23)通过C#类定义Skills .NET 高级开发 | 手写一个对象映射框架 FastAPI数据库ORM怎么选?我肝了三个Demo后,终于不再纠结了 mysqldump 参数拾遗:在遗忘与铭记之间 C# .NET 周刊|2026年3月5期 Claude code入门 - 陈彦斌 一文学习入门 ThingsBoard 开源物联网平台 GitHub 热门项目 | 2026年04月16日 如何为GIT设置全局勾子,为每次提交追加信息 Number.isFinite和isFinite与isNaN()和Number.isNaN的区别 PortSwigger SQL注入LAB2 推荐一个测试人必备的Skills,从功能到性能全搞定(附详细实操和安装下载方式) 筑基期:掌握Odoo基础核心知识点02(Odoo XML 开发方式详解) GLM模型这么火,咱们用vllm也咧一个呗! 深入理解 AbortController:从底层原理到跨语言设计哲学 字符串学习笔记 多租户系统框架的基础模块设计和分析设计 Apache SeaTunnel Zeta 为什么能做到“又快又稳”? AI开发-python-LangGraph框架(3-26-LangGraph基本概念及第一个简单样例) Vue 3 组件通信,别只会用 Props 和 Emits 了,这几个狠活儿你得看看 ElasticSearch7.X版本配置密码 用Manim实现动态交点计算--从一个动点问题说起 团结引擎+Addressable+Instant Game打包抖音小游戏 function call 实战:让 LLM 自动判断 pod 异常、调用日志工具并完成故障分析 bubseek —— 让 Agent 的足迹,变成团队的洞察 通过 C# 读取并导出 PDF 书签 如何用 GitHub Actions 实现 Steam 自动化发布 【从0到1构建一个ClaudeAgent】并发-后台任务 .NET 高级开发 | 定制 ASP.NET Core 框架 电子小白:什么是运算放大器(运放) zero2Agent:面向大厂面试的 Agent 工程教程,从概念到生产的完整学习路线 堆上的ORW HC32F460 USB CDC通信异常:非对齐访问异常排查 20260413-Hyperbridge 攻击事件:发生在默克尔山上的验证绕过 那些喊着AI 要淘汰你的人,正在靠你的焦虑赚大钱! 深度学习进阶(八)Swin Transformer 最小二乘问题详解19:带先验约束的增量式SFM优化与实现 SnapTranslate 3.0 正式发布:全局划词翻译 + 完整英语学习闭环,一站式搞定查词、记词、复习 工作的意义、工作的困难认知再思考 .NET + AI 进阶实战:基于类的技能开发 - 打造可治理的 Agent 能力模块 【从0到1构建一个ClaudeAgent】规划与协调-技能 上周热点回顾(4.6-4.12) 电子小白的工具三件套:面包板、杜邦线、万能板 单表五亿数据的查询优化 | Mysql、StarRocks 2. WorkBuddy:从“我是谁”到“帮我干活” C# 如何减少代码运行时间:7 个实战技巧 基于HelixToolkit.SharpDX 渲染3D模型 - 笺上知微 从零开始的双臂具身VLA起源及现阶段发展综述 - SkyXZ 记对 xonsh shell 的使用, 脚本编写, 迁移及调优 - pluvium27 受够了Vibe Coding的失控?换个起点,让AI事半功倍 从开始配置漏洞环境到漏洞复现流程 - 難しい 关于10年工作经验的程序员对OpenClaw的实战经验分享以及看法 - 虚无境 Any metadata 的内存布局 C# .NET 周刊|2026年3月2期 - InCerry 我帮你测过了,测试圈排名第二的 Skill 依然很牛逼 Skill Discovery | 无监督技能发现的经典工作总结 - MoonOut 上下文工程是什么?过时了么?一文讲明白! - 一枫说码 开了 TUN 模式还是直连?90% 的人都踩过这个坑 AScript扩展多种脚本语言 - rockey627 AI 学习笔记:Agent 的记忆机制 你能被装进一个文件里吗?——7 万人把同事"蒸馏"成了 AI - 我没有三颗心脏 Claude Code 通关手册(七):给 AI 装上技能包——Skills 完全指南 - 暮色之狐 在浏览器中快速编辑代码:VSCode Web 集成实践 - Newbe36524 蒸馏自己 skill?基于 Deepseek 的蒸馏器,丐版蒸馏方式,简单便捷 - To_Carpe_Diem Spring AI Aliababa和AgentScope,哪个更好? - 苏三说技术
写页面时别再把 Element Plus 整个搬进来啦!Vue3按需加载的坑我帮你踩平了
一名程序媛呀 · 2026-05-28 · via 博客园_首页

你是不是也遇到过这种糟心事——项目刚跑起来, npm run build 一看,好家伙,打包后的 js 文件直奔好几兆,首屏加载白屏时间够你喝完一杯咖啡 ☕️。

之前写页面时,使用了 Element Plus 全量引入,结果光一个 element-plus 的 css 就几百 KB。这就好比去超市买个酱油,结果把整个超市搬回家——真没必要。

🎯 先搞清楚:为什么你的 Element Plus 这么重

很多教程一上来就让在 main.js 里写 import ElementPlus from 'element-plus' 然后 app.use(ElementPlus)

这招简单粗暴,但等于把 100 多个组件全注册了,哪怕你只用了一个按钮。

官方其实早就给了按需加载的方案,只是配置起来踩坑无数。今天我就用自己反复掉坑再爬出来的经验,把最稳妥、最省心的自动按需导入方式给你盘清楚。

🧰 环境准备 & 编辑器配置

先保证 Vue3 脚手架就位。我用 Vite,真心快。在终端敲:

pnpm create vue@latest

一路回车,项目秒建。然后打开 VS Code,这几个插件先装上,能省一半命:

👉 Vue - Official(原 Volar):模板语法高亮、类型检查,没它写 Vue3 像近视没戴眼镜。

👉 ESLint + Prettier:代码风格统一,强迫症福音。

👉 Element Plus Snippets:敲几个字母就出组件代码块,懒人必备。

这里可别偷懒,插件装完就不管了。记得在项目根目录的 .vscode/settings.json 里配好格式化,不然同事的代码风格能让你血压飙升。

干脆把我的自用配置贴出来,直接复制就能用。前提是你项目里已经装了 ESLint 和 Prettier 依赖(比如 eslint、prettier、eslint-plugin-vue、@vue/eslint-config-prettier 这些),VS Code 也装了对应的插件。

{
  // 保存时自动格式化
  "editor.formatOnSave": true,
  // 默认用 Prettier 格式化
  "editor.defaultFormatter": "esbenp.prettier-vscode",
  // Vue 文件也交给 Prettier
  "[vue]": {
    "editor.defaultFormatter": "esbenp.prettier-vscode"
  },
  // ESLint 检查哪些文件
  "eslint.validate": [
    "javascript",
    "typescript",
    "vue"
  ],
  // 保存时自动修复 ESLint 报的错
  "editor.codeActionsOnSave": {
    "source.fixAll.eslint": "explicit"
  }
}

⚠️ 踩坑提醒:千万别同时开多个格式化器,我之前就是 Vetur 没禁掉,和 Prettier 打架,一保存代码格式反复横跳,差点砸键盘。

那行 "source.fixAll.eslint" 设成 "explicit"true 稳,能避免偶发的保存卡死。另外如果发现 JS 文件没反应,记得把 "[javascript]" 也加上对应的默认格式化器。

🔥 重点来了:自动按需导入,告别手写 import

你可能会问:“我用 unplugin-element-plus 不就行了?” 是,但不全。最佳实践是三件套搭配使用,让组件、API、样式全自动按需加载

先安装:

pnpm install -D element-plus unplugin-vue-components unplugin-auto-import unplugin-element-plus

然后在 vite.config.ts 里这样配:

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import AutoImport from 'unplugin-auto-import/vite'
import Components from 'unplugin-vue-components/vite'
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'
import ElementPlus from 'unplugin-element-plus/vite'

export default defineConfig({
  plugins: [
    vue(),
    AutoImport({
      resolvers: [ElementPlusResolver()],
    }),
    Components({
      resolvers: [ElementPlusResolver()],
    }),
    ElementPlus({
      useSource: true, // 这行很关键,确保样式按需加载
    }),
  ],
})

配完这三者,你甚至不用在组件里写 import { ElButton } from 'element-plus' ,直接 <el-button> 就能用;API 如 ElMessage 也无需引入,直接调用,丝般顺滑。

官方文档虽然提到了 unplugin-vue-components ,但根据我踩坑经验,不加 unplugin-element-plus 的 useSource 选项,部分组件样式可能会丢失,尤其是动态创建的组件,比如 ElMessage 。

🛠️ 实战:搭一个表单页看看效果

咱们写个极简的登录表单,感受下组件直接用有多爽:

<template>
  <el-form :model="form" label-width="80px">
    <el-form-item label="用户名">
      <el-input v-model="form.username" />
    </el-form-item>
    <el-form-item label="密码">
      <el-input v-model="form.password" type="password" />
    </el-form-item>
    <el-form-item>
      <el-button type="primary" @click="submit">登录</el-button>
    </el-form-item>
  </el-form>
</template>

<script setup>
import { reactive } from 'vue'
// 注意:ElMessage 已经自动导入,直接调用即可
const form = reactive({ username: '', password: '' })
const submit = () => {
  ElMessage.success('提交成功!')
}
</script>

看看,没有一处 import Element Plus 的东西,全都自动按需加载。打包体积肉眼可见地降下来了

image

⚠️ 再说个容易翻车的点:图标怎么用?

是不是以为图标跟以前一样直接用 <el-icon-edit /> ?别天真了。

Element Plus 从某个版本开始把图标库拆成了单独的 @element-plus/icons-vue 。自动导入插件并不会自动帮你导入图标组件,你需要手动从包里引入你需要的那几个图标:

同样,需要先安装:

pnpm install -D @element-plus/icons-vue

然后在组件中按需导入需要的图标:

import { Edit, Delete } from '@element-plus/icons-vue'

然后在模板里使用:

<el-button type="primary">
    <el-icon><Edit /></el-icon>编辑
</el-button>

效果长这样:image

好在图标组件本身很小,手动引入反而更清晰。

官方给出的示例里是在 main.ts 里一次性注册所有图标,这个就看个人喜好了

import * as ElementPlusIconsVue from '@element-plus/icons-vue'

const app = createApp(App)
for (const [key, component] of Object.entries(ElementPlusIconsVue)) {
  app.component(key, component)
}

另一个坑是表单验证必填项忘记加 prop,很多人被卡住,千万记得 el-form-item 上写 prop="username"

💡 进阶思考:主题定制与 CSS 变量

Element Plus 基于 CSS 变量,改主题超级简单。你可以在全局样式里覆盖变量:

:root {
  --el-color-primary: #ff6b6b;
}

所有组件的主色调瞬间变红。如果项目需要深度定制,还可以配合 unplugin-element-plus 的 importStyle: 'sass' 选项,从 SCSS 源码级修改,不过这就进阶了,咱们改天细聊。


好啦,今天就聊到这,如果你也曾被全量引入的 Element Plus 坑得夜不能寐,赶紧照着改一改,打包速度直接起飞。

觉得有用的话,别藏着掖着,点赞收藏加关注走起,顺便转发给那个还在手动 import 组件的冤种同事,拯救他的下班时间。毕竟,程序员们的快乐,就是看 bundle 体积一点点缩水 🤓。