[英]How to scan directories on production on Vercel (with Next.js)?
当通过 URL(例如:mydomain.com/sitemap.xml)访问时,我开发了一个 JS 脚本作为 sitemap.xml 工作,它将列出我的项目的页面。 在开发( yarn dev
)上运行时,它工作正常,在我的电脑上构建和启动后运行( yarn build
& yarn start
)也能工作。 问题是在 Vercel 上它不起作用,错误是:
[GET] /sitemap.xml
19:39:16:85
Function Status:
None
Edge Status:
500
Duration:
146.30 ms
Init Duration:
446.50 ms
Memory Used:
80 MB
info - Loaded env from /var/task/.env.production
info - Loaded env from /var/task/.env
2021-11-18T19:39:17.673Z 68ecb71f-eede-4cbd-81a9-5c677f11e556 ERROR Error: ENOENT: no such file or directory, scandir '/var/task/.next/server/pages/projects'
at Object.readdirSync (fs.js:1047:3)
at getServerSideProps (/var/task/.next/server/pages/sitemap.xml.js:38:56)
at Object.renderToHTML (/var/task/node_modules/next/dist/server/render.js:504:26)
at processTicksAndRejections (internal/process/task_queues.js:95:5)
at async doRender (/var/task/node_modules/next/dist/server/next-server.js:1428:38)
at async /var/task/node_modules/next/dist/server/next-server.js:1523:28
at async /var/task/node_modules/next/dist/server/response-cache.js:63:36 {
errno: -2,
syscall: 'scandir',
path: '/var/task/.next/server/pages/projects',
page: '/sitemap.xml'
}
RequestId: 68ecb71f-eede-4cbd-81a9-5c677f11e556 Error: Runtime exited with error: exit status 1
Runtime.ExitError
我的sitemap.xml.js
上的代码片段是:
const staticPagesProjects = fs
.readdirSync({
development: 'src/pages/projects',
production: __dirname + '/projects',
}[process.env.NODE_ENV])
.filter((staticPagesProjects) => {
return regex.test(staticPagesProjects) && (staticPagesProjects != "index.html") && (staticPagesProjects != "404.html") && (staticPagesProjects != "500.html");
})
.map((staticPagePath) => {
return `${baseUrl}/projects/${staticPagePath.replace(".html", "")}`;
});
谁能告诉我路径有什么问题以及为什么它在我的电脑上有效但在 Vercel 上无效? 谢谢!
我遇到了同样的问题,不幸的是我也没有找到解决方案,但我找到了一种可以提供帮助的方法:
对于 static 页面,我将它们手动添加到数组中。
对于动态页面,它通过连接到数据库并获取数组中的页面来工作。
现在已经一个月了,你找到解决办法了吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.