NodeJS 如何在Vercel上扫描生产目录(使用Next.js)?

xxls0lw8  于 2023-02-21  发布在  Node.js
关注(0)|答案(2)|浏览(156)

我已经开发了一个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上工作?谢谢!

ewm0tg9j

ewm0tg9j1#

我有同样的问题,不幸的是,我也没有找到解决方案,但我找到了一种方法,可以帮助:
对于静态页面,我手动将它们添加到数组中。
对于动态页面,它通过连接到DB并获取数组中的页面来工作。
都一个月了,你找到解决办法了吗?

zdwk9cvp

zdwk9cvp2#

我通过添加path.resolve(process.cwd(), "your folder")解决了此问题
这意味着您将找出源代码的当前路径,而不是构建的源代码

相关问题