用 amplify 和 CDKv2 制作了一个小型的 next.js13 项目。当我转到 url -> item/[id] 时,它给我 500 内部服务器错误。仅在我部署到生产环境后才会出现此问题。当我使用 npm run dev 进行测试时,一切都在本地运行。
在任何地方都找不到解决此问题的方法。
注意 -> 没有编写 API。只是从应用程序目录中获取 items.tsx 文件。它导出一个名为 items 的变量,它是 json 项目的列表。
尝试了一些事情。
路线(app)大小先加载JS
├ λ /(.)item/[id] 0 B 0 B
└ λ /item/[id] 777 B 99 kB
[INFO]:λ(服务器)服务器端在运行时渲染(使用 getInitialProps 或 getServerSideProps)
访问日志图像 1 访问日志图像 2 在这里我看到它在 x-edge-detailed-result-type 中显示 OriginError。
花了很多时间来修复这个 OriginError,尝试以不同的方式修改 next.config.js,使用各种标头,甚至使用“*”。
我启用了 Amplify Hosting Compute Logs 并在 CloudWatch 日志中看到了这一点:
错误 [ERR_PACKAGE_PATH_NOT_EXPORTED]:包子路径“./server.edge” 不是由“出口”定义的 /var/task/node_modules/react-dom/package.json 在新的 NodeError 处 (节点:内部/错误:387:5)在 throwExportsNotFound (节点:内部/模块/esm/resolve:365:9) 在 packageExportsResolve (节点:内部/模块/esm/resolve:649:3)在resolveExports (节点:内部/模块/cjs/loader:556:36)位于 Function.Module._findPath (node:internal/modules/cjs/loader:596:31) .....(还有几行) ...代码:'ERR_PACKAGE_PATH_NOT_EXPORTED'}
这似乎是一个已知问题。 链接 有一个简单的放大修复方法:
__NEXT_PRIVATE_PREBUNDLED_REACT=next
构建:
commands:
- env | grep -e __NEXT_PRIVATE_PREBUNDLED_REACT >> .env.production
- npm run build
这应该可以解决问题。
谢谢马哈茂德!
错误:
对我有用的是:
AWS Amplify > 构建设置
放大.yml
backend:
phases:
build:
commands:
- '# Execute Amplify CLI with the helper script'
- amplifyPush --simple
frontend:
phases:
preBuild:
commands:
- yarn install --frozen-lockfile
build:
commands:
- echo "__NEXT_PRIVATE_PREBUNDLED_REACT=next" >> .env.production
- env | grep -e __NEXT_PRIVATE_PREBUNDLED_REACT >> .env.production
- yarn run build
artifacts:
baseDirectory: .next
files:
- '**/*'
cache:
paths:
- .next/cache/**/*
- node_modules/**/*```