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

如何在Node.js中导入不带扩展名的ES模块

如何在Node.js中实现无扩展名导入ES模块

在Node.js的ES模块(ESM)规范里,默认确实要求导入时必须带上完整文件扩展名,但可以通过以下几种方式实现无扩展名导入:

1. 借助TypeScript/构建工具处理

你提到的示例是TypeScript项目,这类场景下的无扩展名导入主要靠TS编译器或构建工具自动处理:

  • 编写TS代码时可以直接用import { xxx } from './utils'这种无扩展名写法
  • TypeScript编译器(tsc)在将TS编译为JS文件时,会自动补全正确的扩展名(比如.js)
  • 像ESBuild、Vite这类现代构建工具,也会在开发或构建阶段自动解析无扩展名的导入,内部补全符合ESM规范的扩展名后再输出文件

2. 使用Node.js实验性解析标志

Node.js提供了实验性的解析选项,能让ESM使用类似CommonJS的扩展名自动补全逻辑,启动项目时添加该标志即可:

node --experimental-specifier-resolution=node your-entry-file.js

注意这个特性目前仍处于实验阶段,行为可能会在后续版本中变化,不建议在生产环境随意使用。

3. 配置package.json的imports字段

在项目根目录的package.json中配置imports字段,通过路径别名映射隐式补全扩展名,比如:

{
  "imports": {
    "#utils/*": "./src/utils/*.js"
  }
}

之后就可以用import foo from '#utils/foo'替代import foo from './src/utils/foo.js',实现无扩展名导入。

4. 自定义模块加载器

Node.js允许编写自定义加载器,拦截模块解析流程,自动为无扩展名的导入尝试补全常见扩展名(如.js、.mjs、.ts)。不过这种方式需要编写额外的加载器代码,复杂度较高,仅适合特殊场景。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 08:02:01