我已经开发了一个JS脚本,当通过URL访问时,它可以作为sitemap.xml工作(例如:mydomain.com/sitemap.xml),它将列出我的项目的页面。当在开发(yarn dev
)上运行时,它工作正常,当在我的PC(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上工作?谢谢!
2条答案
按热度按时间ewm0tg9j1#
我有同样的问题,不幸的是,我也没有找到解决方案,但我找到了一种方法,可以帮助:
对于静态页面,我手动将它们添加到数组中。
对于动态页面,它通过连接到DB并获取数组中的页面来工作。
都一个月了,你找到解决办法了吗?
zdwk9cvp2#
我通过添加
path.resolve(process.cwd(), "your folder")
解决了此问题这意味着您将找出源代码的当前路径,而不是构建的源代码