项目不需要 vite 编译,Docker 和 Node 直接运行都属于正式发布方式

为什么你会有这个印象

"正式环境需要 vite 编译"这个说法只适用于特定类型的前端项目——即用 Vue / React 等框架开发、源码是 .vue / .jsx / .ts / ESM 模块的项目。这类源码浏览器无法直接执行,必须用 vite/webpack 等工具打包、压缩、转译成可部署的静态文件,这就是"构建(build)"环节。

这个项目的实际情况(已验证)

检查项 结果
package.json 依赖 ❌ 无 vite/webpack,只有 express、drizzle、markdown-it 等运行时库
scripts 无 build 脚本,start 就是 node src/app.js
Dockerfile npm install --omit=dev 装完依赖直接启动,中间没有任何编译步骤
前端形态 Handlebars 模板服务端渲染(.hbs 运行时渲染出 HTML),不是 SPA
静态资源 public/css/admin/admin.css 用浏览器原生 @import 加载分片(见 admin.css),无需打包
后端代码 Node.js 原生 ESM,node 直接解释执行,JS 本身无编译环节

根本原因:这个项目的"前端"由服务器用 Handlebars 在运行时渲染成 HTML 输出,静态 CSS/JS 都是手写的、浏览器可直接加载的原始文件——整个链路没有任何需要预编译的源码,所以没有 build 环节。

那"正式发布"的关键在哪里

对这类 Node 服务端渲染项目,区分生产/开发不看编译,而看:

  1. 启动方式:npm start(node 直跑,无 nodemon 热重载)
  2. NODE_ENV=production 环境变量(.env 配置)
  3. SESSION_SECRET 必设(生产安全要求)
  4. 不装开发依赖:Dockerfile 里的 npm install --omit=dev 已隐含此意(nodemon、drizzle-kit 等开发工具不会进镜像)
  5. 执行数据库迁移:npm run db:migrate(Docker 里由 docker-entrypoint.sh 处理)

Docker 与 Node 直接运行在生产层面等价——Docker 镜像里跑的也是 node,只是额外封装了进程管理(dumb-init)、健康检查、数据卷持久化,属于更完善的生产部署形态。

什么时候才需要引入 vite

如果未来把前端改造成 Vue/React SPA,或者用 TypeScript 编写代码,那才需要增加 vite/tsc 构建步骤。当前架构下没有这个需求。

一句话总结:vite 不是"正式发布"的必要条件,只是前端工程化项目的一个环节;本项目是服务端渲染 + 原生静态资源架构,生产环境直接 npm start 或 Docker 运行即可。