项目不需要 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 服务端渲染项目,区分生产/开发不看编译,而看:
- 启动方式:
npm start(node直跑,无 nodemon 热重载) NODE_ENV=production环境变量(.env 配置)SESSION_SECRET必设(生产安全要求)- 不装开发依赖:Dockerfile 里的
npm install --omit=dev已隐含此意(nodemon、drizzle-kit 等开发工具不会进镜像) - 执行数据库迁移:
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 运行即可。