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

已在package.json设置"type": "module",如何不修改.js扩展名让部分文件不被视为ES模块?

解决方案:在ES模块项目中保留.js扩展名同时指定特定文件为CommonJS

完全可以实现,无需修改目标文件的扩展名,通过配置package.json即可完成需求。

核心方法:利用package.json的exports字段

当项目根目录的package.json设置了"type": "module"(默认所有.js文件按ES模块处理),你可以通过exports字段为特定文件单独指定模块类型,让Node.js将其当作CommonJS处理。

具体配置示例(假设目标文件为filename.js):

{
  "type": "module",
  "exports": {
    "./filename.js": {
      "type": "commonjs",
      "default": "./filename.js"
    }
  }
}

原理说明

  • exports字段是Node.js控制模块解析的核心配置,优先级高于默认的扩展名和type规则。
  • 上述配置明确告诉Node.js:无论通过require还是import加载./filename.js,都将其视为CommonJS模块处理,同时保留原有的.js扩展名,完全满足服务器脚本直接指向该文件的要求。

替代方案(适用于文件不在根目录的场景)

如果目标文件位于子目录中,你可以在该子目录下创建一个独立的package.json,仅包含以下内容:

{
  "type": "commonjs"
}

这样该子目录下所有.js文件都会被当作CommonJS处理,无需修改根目录的exports配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 13:02:34