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

解决cdk deploy时Cannot use import statement outside a module错误

问题根源拆解

  • 一开始的SyntaxError,是因为你的React JS文件用了ES模块的import语法,但Node.js默认按CommonJS模式加载文件,不认ES模块写法,所以报错。
  • 加了"type": "module"后,Node.js强制所有文件按ES模块处理,但CDK默认用ts-node运行TS文件,而ts-node处理ES模块的TS文件需要额外配置;再加上你的tsconfig.json里include只包含src/**/*,漏掉了CDK核心的bin和lib目录,导致npm run build根本没编译这些TS文件,cdk deploy直接运行原TS文件,自然触发扩展名错误。

一步步解决建议

1. 修正TypeScript编译配置

修改tsconfig.json,把CDK的核心目录加入编译范围,同时调整模块配置适配ES模块:

{
  "compilerOptions": {
    "outDir": "./dist/",
    "baseUrl": ".",
    "target": "es2020", // 升级目标版本,提升ES模块兼容性
    "lib": ["dom", "dom.iterable", "esnext"],
    "allowJs": true,
    "skipLibCheck": true,
    "strict": false,
    "forceConsistentCasingInFileNames": true,
    "esModuleInterop": true,
    "module": "esnext",
    "moduleResolution": "node16", // ES模块推荐使用node16解析策略
    "resolveJsonModule": true,
    "isolatedModules": true,
    "jsx": "react",
    "downlevelIteration": true,
    "moduleSuffixes": [".ts", ".js"] // 帮助TS识别混合模块的文件后缀
  },
  "include": ["src/**/*", "bin/**/*", "lib/**/*"], // 新增CDK核心目录
  "exclude": ["node_modules"]
}

2. 配置ts-node支持ES模块

在package.json中添加ts-node配置,让它能正确处理ES模块的TS文件:

{
  // ... 其他原有配置
  "ts-node": {
    "esm": true,
    "experimentalSpecifierResolution": "node"
  }
}

3. 调整CDK脚本的运行方式

有两种可选方案,推荐第一种(更稳定):

  • 选项一(推荐):使用编译后的JS文件运行CDK
    修改package.json的scripts字段:
{
  "scripts": {
    "build": "tsc",
    "watch": "tsc -w",
    "test": "jest",
    "cdk": "cdk --app dist/bin/aws-cdk-namespace-deployment.js" // 指定编译后的产物文件
  }
}
  • 选项二:让ts-node直接运行TS文件
{
  "scripts": {
    // ... 其他脚本
    "cdk": "ts-node --esm node_modules/aws-cdk/bin/cdk.js"
  }
}

4. 分离前端React代码与CDK代码

React JS文件属于前端代码,需要用webpack单独打包,避免和CDK的后端编译产物混淆。给webpack单独编写配置,指定前端代码的入口,输出到独立目录(比如dist-frontend)。

5. 验证修复流程

按以下顺序执行,确认问题解决:

  1. 运行npm run build,检查dist目录下是否生成了bin和lib对应的JS文件
  2. 运行npm run cdk deploy,验证报错是否消失

额外提醒

  • 不要在package.json中同时混用CommonJS和ES模块配置,保持语法统一
  • 如果你的CDK版本较低,对ES模块支持有限,建议升级aws-cdk和aws-cdk-lib到较新的稳定版本
  • 尽量统一JS文件的模块语法,避免同时使用require和import

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 09:30:56