Vue 逻辑复用的多种方案对比!

前言

这一章不讲"工具怎么配",而是讲:

怎样把一个 Vue 项目,从"能跑"建设成"长期可维护的工程"

如果你现在:

  • 新人一进项目就懵
  • 老人一改代码就怕
  • 分支一多就乱
    那问题99% 不在 Vue,在工程化

工程化不是"配置多",而是降低长期协作成本

一、项目初始化:第一天就决定了三年后的命运

1️⃣ 初始化不是 npm create 就结束了

初始化阶段必须做 3 件事:

✅ 1. 明确技术栈边界

在 README 里写清楚(不是写给自己,是写给半年后的新人):

  • Vue 3 + TypeScript(是否强制)
  • 构建工具:Vite
  • 状态管理:Pinia
  • 路由:Vue Router
  • UI 库(是否允许多个)
  • 是否允许 Options API

👉 "能不能用"要在项目第一天定死

✅ 2. 初始化即开启严格模式
ts 复制代码
// tsconfig.json
"strict": true

很多团队失败在一句话:

"先宽松点,后面再收紧。"

现实是:永远不会收紧

✅ 3. 初始化就接入工程工具
  • ESLint
  • Prettier
  • Git hooks(husky)
  • commit 规范

👉 工程工具不是"后补",是"地基"

二、目录结构规范:不是好看,是为了"找得到"😤

2️⃣ 推荐目录结构(中大型项目)

json 复制代码
src/
├─ app/                # 应用级配置(路由、store 注册)
├─ assets/             # 静态资源
├─ components/         # 通用组件(无业务)
├─ features/           # 业务模块(强烈推荐)
│   ├─ user/
│   │   ├─ pages/
│   │   ├─ components/
│   │   ├─ composables/
│   │   └─ api.ts
│   └─ order/
├─ composables/        # 全局通用逻辑
├─ stores/             # Pinia store
├─ services/           # API 请求封装
├─ utils/              # 纯工具函数
├─ styles/             # 全局样式
└─ main.ts

3️⃣ 核心原则(比结构更重要)

❌ 不推荐
  • components 里放业务组件
  • utils 里写业务逻辑
  • 页面到处 import 各种东西
✅ 推荐

"功能相关的代码,放在一起"

👉 Feature-based 结构 > 技术类型结构

三、环境区分:这是"线上事故高发区"⚠️

4️⃣ 不同环境至少要区分这些

  • API Base URL
  • 是否开启 mock
  • 是否打印日志
  • 是否开启 devtool
  • 第三方 key(统计 / Sentry)

5️⃣ 推荐做法(Vite)

txt 复制代码
.env
.env.development
.env.test
.env.production
ts 复制代码
const baseURL = import.meta.env.VITE_API_BASE

⚠️ 约定:

  • 所有自定义变量必须 VITE_ 开头
  • 不要在代码里写死环境判断

6️⃣ 环境策略最佳实践

ts 复制代码
if (process.env.NODE_ENV === 'production') {}

ts 复制代码
if (import.meta.env.VITE_ENABLE_LOG)

👉 环境不是"if else",而是"配置驱动"

四、代码规范:不是"限制",是"减少无意义争论"😅

7️⃣ 必须统一的规范(强制)

✅ ESLint(逻辑正确性)
  • no-unused-vars
  • no-implicit-any
  • no-floating-promises
  • 禁止 any(可白名单)
✅ Prettier(格式)
  • 不讨论缩进、引号
  • 保存即格式化

👉 代码评审不该讨论格式

8️⃣ 命名规范(比你想象的重要)

  • 组件:PascalCase
  • composable:useXxx
  • store:useXxxStore
  • 文件名:kebab-case

handleData2

fetchUserList

9️⃣ 强烈建议的约束规则

  • 禁止在模板中写复杂表达式
  • setup 超过 150 行必须拆
  • 禁止跨 feature 直接 import 内部文件

👉 规范是为了"逼你拆模块"

五、自动化工具:把"人为失误"交给机器 🤖

🔟 Git Hooks(必须)

pre-commit
  • ESLint
  • TypeScript 检查
  • 单元测试(可选)
commit-msg
  • 规范 commit message(conventional commits)
txt 复制代码
feat: 支持用户列表分页
fix: 修复登录态丢失问题

1️⃣1️⃣ CI(工程成熟的标志)

至少要有:

  • lint
  • type check
  • build

进阶:

  • 单元测试
  • E2E
  • 覆盖率门禁

👉 CI 不是为了卡人,是为了卡事故

六、你真的需要的不是"更多工具",而是"工程纪律"😤

工程化失败的常见原因

  • 工具配了,但没人遵守
  • 规范写了,但不 enforce
  • 架构设计靠口头约定

👉 没有自动化兜底的规范 = 建议

七、一句话工程化总结(非常重要)

  • 工程化 = 降低协作成本
  • 目录结构 = 认知地图
  • 规范 = 自动化约束
  • 工具 = 把"重复 + 易错"交给机器
相关推荐
恋猫de小郭13 小时前
Flutter Zero 是什么?它的出现有什么意义?为什么你需要了解下?
android·前端·flutter
崔庆才丨静觅19 小时前
hCaptcha 验证码图像识别 API 对接教程
前端
passerby606120 小时前
完成前端时间处理的另一块版图
前端·github·web components
掘了20 小时前
「2025 年终总结」在所有失去的人中,我最怀念我自己
前端·后端·年终总结
崔庆才丨静觅20 小时前
实用免费的 Short URL 短链接 API 对接说明
前端
崔庆才丨静觅20 小时前
5分钟快速搭建 AI 平台并用它赚钱!
前端
崔庆才丨静觅21 小时前
比官方便宜一半以上!Midjourney API 申请及使用
前端
Moment21 小时前
富文本编辑器在 AI 时代为什么这么受欢迎
前端·javascript·后端
崔庆才丨静觅21 小时前
刷屏全网的“nano-banana”API接入指南!0.1元/张量产高清创意图,开发者必藏
前端
剪刀石头布啊21 小时前
jwt介绍
前端