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
相关产品推荐
相关产品推荐

