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

为何NestJS原生支持ES导入却不支持外部ES模块?

NestJS中ES模块使用疑惑解答

首先要明确:你在新项目里看到的import/export是TypeScript语法,不是原生Node.js的ES模块语法。

NestJS默认以TypeScript开发,TypeScript的模块语法会被编译器转译为Node.js默认支持的CommonJS模块(也就是require/module.exports)。所以你写的TS代码里用ES模块语法没问题,但最终运行的是编译后的CommonJS代码,并非原生ES模块。

你自行创建模块时报错“export不是合法关键字”,大概率是这两个原因:

  • 你直接创建了.js文件并使用ES模块的export语法,但项目默认是CommonJS环境,Node.js会把.js文件当作CommonJS模块解析,这时export属于非法语法。
  • 你的TypeScript配置或构建流程有问题,导致部分代码没有被正确转译,比如引入了未经过TS编译的外部ES模块文件。

至于“NestJS不支持ES模块”的说法已经过时,现在NestJS完全支持原生ES模块,但需要手动切换项目配置:

  • 在package.json中添加"type": "module"
  • 修改tsconfig.json:设置"module": "ESNext"、"target": "ES2020"或更高版本、"moduleResolution": "NodeNext"
  • 使用支持ES模块的工具启动项目,比如ts-node-esm替代ts-node

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 10:43:14