写给架构师、TL、全栈工程师的“踩坑地图”
(零)阅读指南
• 不贴源码,用伪代码 + 流程图 + 决策树。
• 50 条心法分 6 大篇章,可跳跃阅读。
(一)脚手架与工程化 8 条
心法 1:用 create-vue 而不是 vue-cli 开启新项目,Vite 冷启动 300 ms vs Webpack 30 s。
心法 2:eslint-config-prettier + @vue/eslint-config-typescript 一键集成,团队争议减少 80%。
心法 3:monorepo 选 pnpm workspace,配合 changesets 实现“子包独立发版”。
心法 4:环境变量分层:.env.local → .env.development → .env.staging → .env.production,防止测试配置泄漏。
心法 5:引入 unplugin-auto-import/unplugin-vue-components,模板中无需手写 import,Tree-Shaking 仍然生效。
心法 6:husky + lint-staged 提交前跑 eslint --fix + prettier --write,MR 只关心业务逻辑。
心法 7:CI/CD 用 GitHub Actions:
build → vitest unit → cypress component → lighthouse → docker build → deploy preview。
心法 8:Docker 镜像多阶段构建:FROM node:18-alpine AS deps → FROM nginx:alpine AS runtime,镜像体积 < 20 MB。
(二)权限系统 7 条
心法 9:RBAC + 前端守卫双保险。后端返回 roles 与 permissions,前端用 vue-router meta + 全局 beforeEach 做路由级守卫。
心法 10:按钮级权限用自定义指令 v-can="'user.delete'",内部调用 usePermission() 判断。
心法 11:权限缓存策略:登录后写入 Pinia + localStorage;刷新 token 后增量更新,避免全量拉取。
心法 12:动态路由 addRoute 后需调用 router.replace(),否则 404。
心法 13:刷新页面后动态路由丢失,用 vite-plugin-pages 自动生成路由表,再合并后端返回的权限路由。
心法 14:权限表达式支持 AND/OR/NOT,用 @casl/ability 解析 AST,防止手写 if 地狱。
心法 15:管理员模拟用户登录,用 JWT extra payload 标记 proxyUser,前端弹层提示“当前为模拟视图”。
(三)国际化 6 条
心法 16:vue-i18n@9 + Composition API:useI18n() 直接返回 t/rt/d 函数,支持 <script setup>
(四)微前端 8 条
心法 22:选型决策树:
团队技术栈统一?→ No → 选 qiankun 或 single-spa
需要 vite 开发?→ Yes → 选 vite-plugin-federation 或 Module Federation
心法 23:主应用用 Vue3,子应用可用 React/Angular/Svelte,只要暴露生命周期钩子 mount/unmount/update。
心法 24:样式隔离:构建时 scoped css
运行时 shadow DOM(仅当需要完全隔离)
心法 25:通信机制:父子通信:props + custom event
跨子应用:Pinia + shareScope 或 pubsub-js
心法 26:路由冲突:主应用用 history,子应用用 memory router,挂载时动态注入 base。
心法 27:公共资源 externals:vue、vue-router、pinia 由主应用提供,子应用打包排除,减少 30% 体积。
心法 28:灰度发布:通过 nginx 层按 cookie 分流,子应用独立域名,回滚只需切换 upstream。
(五)跨端 9 条
心法 29:一套代码多端输出,用 uni-app / Taro 3 + Vue3 编译器。
心法 30:条件编译:
#ifdef H5 使用 web api
#ifdef MP-WEIXIN 使用 wx.request
心法 31:样式差异化:小程序用 rpx,H5 用 rem,postcss-pxtransform 自动转换。
心法 32:Pinia SSR 兼容小程序:用 pinia-plugin-persist 把状态同步到 wx.setStorageSync。
心法 33:路由跳转:H5 用 vue-router,小程序用 uni.navigateTo,封装统一 jump(url, params)。
心法 34:组件库选型:PC:element-plus
移动:vant@4 + @vant/touch-emulator
小程序:uni-ui
心法 35:构建产物差异化:vite build --mode h5
vite build --mode mp-weixin
心法 36:跨端调试:H5:vite dev + chrome
小程序:微信开发者工具 + sourcemap
心法 37:性能预算:主包 < 2 MB,分包异步路由,首屏 < 3 秒。
(六)可视化与低代码 12 条
心法 38:自研低代码平台架构:
物料层:Vue3 SFC 组件 + schema.json 描述 props/events
渲染层:runtime-core + runtime-dom,支持 SSR
设计器:monaco-editor + fabric.js 画布
心法 39:schema 版本管理:JSON Schema + ajv 校验,升级时自动迁移旧数据。
心法 40:拖拽对齐:用 vue-draggable-next + snap-to-grid,实时渲染辅助线。
心法 41:变量系统:支持表达式 {{ state.user.name }},编译时转成 _ctx.state.user.name。
心法 42:事件编排:可视化流程图 + async/await 生成器
支持调用 API、跳转路由、打开弹窗
心法 43:出码策略:一键导出 Vue3 SFC,保留 TypeScript 类型
支持 Tailwind/Element 主题包
心法 44:预览沙箱:用 iframe + sandbox 属性,限制访问 top window。
心法 45:权限继承:页面级权限 → 组件级权限 → 元素级权限,低代码平台自动写入 v-can。
心法 46:性能优化:设计器用 Web Worker 解析 schema
渲染层用 v-memo 减少 diff
心法 47:回退策略:每次发布生成 git tag,支持一键回滚到任意版本
心法 48:表单校验:集成 vee-validate@4,支持 yup/zod 规则链。
心法 49:国际化一键同步:低代码平台导出 i18n key-value,翻译后回灌。
心法 50:监控与告警:页面加载耗时 > 5 s 自动上报 Sentry
组件报错捕获,定位到 schema 行号
结语:Vue3 的门槛已不再是“会不会写”,而是“如何落地到 100+ 人团队、10+ 项目、3 大业务域”。50 条心法是 3 年 7 个项目 200 次 MR 的沉淀,愿你在下一次 Code Review 时,少一次 “啊?怎么又踩坑”。