能否将./server.ts设为Vite SSR构建入口并保持SSR正常运行?
解决方案
1. 修改Vite配置,指定SSR入口为server.ts
在vite.config.ts中更新build.ssr配置,将入口指向你的server.ts,Vite会自动处理TypeScript编译,同时打包server.ts及其依赖的entry-server.ts:
import { defineConfig } from 'vite' import vue from '@vitejs/plugin-vue' export default defineConfig({ plugins: [vue()], build: { ssr: './server.ts', outDir: 'dist', rollupOptions: { // 标记无需打包的外部依赖(比如express这类Node.js原生库) external: ['express'] } } })
2. 调整server.ts中的导入逻辑
既然Vite会打包server.ts,直接导入源文件src/entry-server.ts即可,无需再引用dist目录的产物:
// 替换原动态导入语句 import { render } from './src/entry-server' // 若需开发模式热更新,可保留动态导入但指向源文件 // const { render } = await import('./src/entry-server')
3. 更新package.json脚本
修改打包和启动脚本,确保正确触发SSR打包并运行产物:
{ "scripts": { "build": "vite build && vite build --ssr", "dev": "vite", "start": "node dist/server.js" } }
说明:
vite build先打包客户端资源,vite build --ssr会基于配置的SSR入口打包服务端代码。
4. 验证运行
- 开发模式:执行
pnpm dev,Vite自动处理TS编译和热更新,无需手动构建 - 生产模式:执行
pnpm build完成打包后,用pnpm start启动服务
这样既不用手动配置TypeScript构建,也能让server.ts作为SSR入口正常工作,同时解决了entry-server.ts的导入问题。
内容的提问来源于stack exchange,提问作者Robert Kajic
相关产品推荐
相关产品推荐

