我正在尝试在vercel上部署一个Vite应用程序,该应用程序使用express进行SSR。
express 服务器运行成功,但 vercel 没有部署构建的文件(dist/server 和 dist/client,参见 Vite SSR 指南)
然后我更改了 vercel 构建输出配置,希望这能将文件复制过来:
{
"version": 3,
"cache": ["./api/*", "./dist/server/*", "./dist/client/*"]
}
网上实在找不到这方面的资料
我遇到了同样的问题,但找到了解决方案(感谢这篇文章):
server.js
分成 2 个文件:server.js
... // imports & constants (without port)
export const app = express();
... // server code
// Start http server
import { app } from './server.js';
const port = process.env.PORT || 5173;
app.listen(port, () => {
console.log(`Server started at http://localhost:${port}`);
});
这将允许您仍然在本地启动您的应用程序。
api
并在其中放置一个文件 index.js
,其中包含:import { app } from '../server.js';
export default app;
我们这样做是为了让 Vercel 将我们的服务器作为无服务器功能启动。 Vercel 无法使用
app.listen()
。
vercel.json
,其中包含:{
"version": 2,
"public": true,
"rewrites": [
{ "source": "/(.*)", "destination": "/api/index.js" }
],
"functions": {
"api/index.js": {
"includeFiles": "dist/client/**"
}
}
}
rewrites
将所有请求转发到无服务器函数。 includeFiles
允许提供目录和访问文件。