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
验证方法
- 执行
npm install安装依赖 - 在
src/index.ts中写入带顶级await的代码 - 运行
npm run dev,此时控制台应该正常输出结果,不会抛出顶级await相关的错误
内容的提问来源于stack exchange,提问作者MrVoland
相关产品推荐
相关产品推荐

