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

package.json子路径导出中,右侧文件路径是否必须带.js后缀?

package.json exports子路径右侧是否必须添加.js后缀?

疑问背景

  • 此前听闻package.json的exports字段子路径规则中,右侧文件路径说明符必须添加.js后缀,但查阅Node.js官方文档后,未找到明确的明文规定,仅所有示例均带有.js后缀。
  • 文档中关于子路径扩展名的说明仅覆盖左侧匹配模式,并未提及右侧解析目标的后缀要求,目前仅明确右侧需为./开头的相对文件路径且支持通配符,暂未找到对右侧路径类型的详细定义。

疑问来源场景

  • three.js包采用无.js后缀的exports写法引发了问题,不确定该写法是否合法;
  • 有Stack Overflow回答称规范要求右侧必须带.js后缀,但仅能从示例中看到该写法,无官方明文支撑。

规则关联疑问

JavaScript的import语句对模块说明符的合法性有诸多规定,处理方式依赖宿主环境、实现或打包工具,但不确定这些规则是否适用于package.json exports,尤其是否仅影响exports子句的左侧路径?

权威依据与配置合法性询问

想了解exports右侧文件路径说明符合法性的权威参考依据,同时询问以下两个配置是否均合法:

配置1(无.js后缀)

{
  "exports": {
    "./examples/jsm/*": "./examples/jsm/*",
    "./addons/*": "./examples/jsm/*",
    "./src/*": "./src/*"
  }
}

配置2(带.js后缀)

{
  "exports": {
    "./examples/jsm/*": "./examples/jsm/*.js",
    "./addons/*": "./examples/jsm/*.js",
    "./src/*": "./src/*.js"
  }
}

关联逻辑梳理(更新)

此前误以为JS import的宿主规则不影响package.json导出规则,实际存在明确的关联链:

  • C:package.json exports的右侧文件路径
  • B:exports的左侧子路径,同时也是JavaScript import语句中的模块说明符
  • 宿主规则会在B环节生效,因此即使不讨论exports左侧子路径的后缀规则,当这些子路径作为import说明符时,宿主特定的后缀规则也会生效。简言之,package.json子路径中是否包含.js后缀,会直接影响JavaScript import说明符的宿主特定行为。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 06:03:40