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

Node 18+TypeScript+SWC环境下顶级await配置失效求助

Node + SWC 顶级await失效问题解决

问题根源

你当前的SWC配置输出的是CommonJS模块,但Node的CommonJS规范并不支持顶级await特性——只有ES模块(ESM)才能正常使用顶级await。这就是你开启了parser的topLevelAwait却没效果的核心原因。

修正后的完整配置方案

1. .swcrc 调整

把输出模块类型改为es6,同时确保parser的顶级await开关开启,目标语法设为支持await的版本:

{
  "env": {
    "targets": {
      "node": 18
    }
  },
  "jsc": {
    "parser": {
      "syntax": "typescript",
      "topLevelAwait": true
    },
    "target": "es2022"
  },
  "module": {
    "type": "es6"
  },
  "sourceMaps": "inline"
}

2. tsconfig.json 优化

保持module为esnext,target升级到es2022以完整支持顶级await:

{
  "extends": "@tsconfig/node18/tsconfig.json",
  "compilerOptions": {
    "target": "es2022",
    "module": "esnext",
    "moduleResolution": "node",
    "esModuleInterop": true,
    "lib": ["ESNext"],
    "outDir": "dist",
    "skipLibCheck": true
  },
  "include": ["src"],
  "exclude": ["node_modules", "**/*.test.ts"]
}

3. package.json 关键修改

必须添加"type": "module"声明,告诉Node当前项目使用ES模块:

{
  "type": "module",
  "scripts": {
    "build": "rimraf dist && swc ./src -d dist",
    "build-dev": "npm run build && node --inspect dist/index.js",
    "dev": "nodemon --ext ts --exec \"npm run build-dev\""
  },
  "devDependencies": {
    "@swc/cli": "^0.1.62",
    "@swc/core": "^1.3.90",
    "@tsconfig/node18": "^18.2.2",
    "nodemon": "^3.0.1",
    "rimraf": "^5.0.5",
    "typescript": "^5.2.2"
  }
}

极简项目结构参考

your-node-project/
├── src/
│   └── index.ts  # 示例代码:const msg = await Promise.resolve('顶级await生效了!'); console.log(msg);
├── .swcrc
├── tsconfig.json
└── package.json

验证方法

  1. 执行npm install安装依赖
  2. 在src/index.ts中写入带顶级await的代码
  3. 运行npm run dev,此时控制台应该正常输出结果,不会抛出顶级await相关的错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 01:30:21