1.独立 Node(mock‑server.js/express /json‑server)模拟数据流行度真实情况
不算最主流,但属于成熟经典方案,大厂内部项目不少在用;开源 vite 模板里用的少
1.1. 现状分布
开源脚手架追求:只启动一个终端 pnpm dev,一条命令跑完整项目,不想让新手额外开第二个终端窗口。
所以公开模板普遍选择:vite‑plugin‑mock‑dev‑server,牺牲一部分稳定性,换取单命令启动体验。
很多公司内部后台,会手写mock‑server.js或者用json‑server:
- 不受 Vite 版本升级、插件 bug、插件停止维护的影响;
- mock 逻辑完全独立,vite 只负责 proxy 转发;
- 联调后端,仅仅修改 proxy 的 target 地址;
- 增删改查内存数据不会因为改 mock 配置文件就全部清空(插件的知名坑)。
缺点:package scripts 要配置两条启动命令,新人需要知道要开两个终端。
1.2. 四种方案通俗对比(针对我们仿‑若依后台)
表格
| vite‑plugin‑mock‑dev‑server | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | 嵌入 vite,单终端;存在代理冲突、内存数据热更重置、文件名后缀强制规则坑 |
| 独立 express mock‑server.js | ⭐⭐ | ⭐⭐⭐⭐ | 完全独立服务,稳定无插件坑;必须双终端启动 |
| json‑server(零代码独立 mock) | ⭐⭐ | ⭐⭐⭐ | 只用 json 文件自动生成 CRUD;自定义复杂登录校验逻辑写起来别扭稀土掘金 |
| MSW | ⭐⭐⭐ | ⭐⭐⭐⭐ | 浏览器层拦截,适合单元测试;写分页、登录业务逻辑繁琐 |
1.3. 关键认知
“流行” 分两种:
1.4. 针对我们项目二选一建议
1.4.1. 选项 A:vite‑plugin‑mock‑dev‑server
✅优点:只开一个终端,和网上教程对齐
⚠️代价:要记住那几个坑:.mock.js后缀、环境变量开关、不要和 proxy 混用、热更新内存数据丢失。
1.4.2. 选项 B:独立 mock‑server.js(express)
✅优点:没有任何 vite 插件坑,写接口语法就是标准后端 express 写法,调试逻辑直观,后续就算升级 Vite 大版本完全不受影响。
⚠️代价:需要两个终端;可以配置package.json scripts简化启动。
"scripts": {
"dev":"vite",
"mock":"node mock-server.js"
}
开发时,一个终端执行pnpm dev,另一个执行pnpm mock。
1.4.3. 我建议咱们怎么做?
咱们做学习搭建仿若依项目,我更偏向B 方案独立 express mock‑server.js:
当然,如果你希望和开源模板一致,不想多开终端,我们就选 A,我把所有坑提前写进注释提醒。
2. 独立 mock‑server.js 后期完全可以移除
分两种场景讲清楚:开发阶段、打包上线、联调后端
2.1. 本地联调后端的时候(还没上线)
不需要直接删除文件,不用删掉 mock‑server.js。
只修改 vite.config.js 的 proxy 的 target:
proxy:{
'/api':{
// target:'http://127.0.0.1:3000', // mock服务,开发模拟数据用
target:'http://真实后端地址:8080', // 对接真实后端
changeOrigin:true
}
}
- 关掉 pnpm mock 这个终端,不再启动 mock 服务;
- 前端所有请求全部转发给真实后端;
- mock‑server.js 文件还留在项目里,保留作为备份,后续如果后端接口挂了,本地调试页面还能切回来用 mock。
团队项目建议保留,不要直接删除,方便后续维护页面。
2.2. 打包构建生产 pnpm build
✅ mock‑server.js 完全不会打进 dist 产物!
mock‑server.js 是node 脚本,仅本地开发运行,浏览器永远不会执行这份代码。
打包 Vite 只会处理 src 下面前端代码,根目录 mock‑server.js、mock 相关依赖 express/cors 是devDependencies开发依赖,生产打包会自动忽略。
就算文件还在项目文件夹,执行 build 之后 dist 里面看不到任何 mock 相关代码,线上不会有 mock 逻辑、不会泄露模拟数据。
2.3. 真正彻底移除(不需要 mock 备份时)
如果你确定以后再也不用这套模拟接口,可以完整清理干净:
pnpm remove -D express cors
🆚对比 vite‑plugin‑mock‑dev‑server
插件版虽然可以环境变量关闭插件,但:
- 插件代码依然安装在 node_modules;
- mock 目录文件还在;
- 要保证环境变量正确,否则一不小心 mock 还在拦截请求;
独立 mock‑server 逻辑更直白:你不运行node mock‑server.js,mock 就完全不存在,不会偷偷拦截任何请求,没有暗坑。
