You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

启动Payload时payload.config.ts导入模块错误求助

解决PayloadCMS v2.25.0集成Next.js 13时的SyntaxError: Cannot use import statement outside a module错误

错误原因

  • 虽然package.json已配置"type": "module",但ts-node默认对ESM格式的TS文件解析配置不全,导致payload.config.ts被当作CommonJS文件处理,无法识别import语句。
  • tsconfig.json的编译选项未适配ESM模块规范,生成的代码与项目的模块模式不匹配。

解决办法

方法1:修复ts-node的ESM解析配置

方式A:修改启动命令

在启动命令中添加参数强制Node.js使用Node风格的模块解析:

node --loader ts-node/esm --experimental-specifier-resolution=node server.ts

方式B:在package.json中配置ts-node

在package.json中添加ts-node的ESM专属配置,避免每次启动重复加参数:

{
  "type": "module",
  "ts-node": {
    "esm": true,
    "experimentalSpecifierResolution": "node"
  }
}

之后直接用原命令启动即可:node --loader ts-node/esm server.ts

方法2:调整tsconfig.json适配ESM

确保tsconfig.json的关键编译选项符合ESM规范:

{
  "compilerOptions": {
    "module": "ESNext", // 生成ESM格式代码
    "moduleResolution": "Bundler", // 适配Next.js的解析逻辑,也可设为NodeNext
    "target": "ES2020", // 兼容Node.js 20的语法
    "esModuleInterop": true,
    "skipLibCheck": true,
    "strict": true,
    "outDir": "./dist"
  },
  "include": ["server.ts", "payload.config.ts"]
}

方法3:改用tsx替代ts-node(更简便)

tsx对ESM的支持更原生,无需复杂配置:

  1. 安装tsx:
npm install -D tsx
  1. 用tsx启动服务:
tsx server.ts

关键注意事项

  • 绝对不要修改node_modules中的文件:Payload内部的require语法属于CommonJS规范,Node.js 20原生支持CommonJS与ESM混合加载,修改依赖文件会导致版本更新时配置丢失,还可能引发其他兼容性问题。
  • 确保payload.config.ts使用ESM导出:必须用export default导出Payload配置对象,不要使用module.exports。

内容的提问来源于stack exchange,提问作者Cemil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 06:52:41