Node.js CommonJS 规范中的 LOAD_PACKAGE_EXPORTS 应该如何工作?

问题描述 投票:0回答:1

我正在尝试实现

require()
模块ID解析器,如https://nodejs.org/api/modules.html#all-together中所述,目前被LOAD_PACKAGE_EXPORTS的非正式措辞所困扰:

Try to interpret X as a combination of NAME and SUBPATH where the name may have a @scope/ prefix and the subpath begins with a slash ('/').

如果 X 包含多个斜杠,哪一个开始 SUBPATH? @scope/ 前缀结尾的斜杠也可以作为分隔符吗?前缀是否被视为名称的一部分?


稍微不那么重要:LOAD_PACKAGE_SELF 说

let MATCH = PACKAGE_EXPORTS_RESOLVE(pathToFileURL(SCOPE), "." + X.slice("name".length), package.json "exports", ["node", "require"]) defined in the ESM resolver.

我假设

"name"
指的是
package.json
中的“名称”字段。当上一步断言 X 以名称字符串开头时,为什么要对 X 进行切片?

node.js commonjs
1个回答
0
投票

https://nodejs.org/api/esm.html#resolution-algorithm-specification中的PACKAGE_RESOLVE处理类似的模式,我假设这里也意味着:如果X不以

@
开头,则第一个斜杠开始子路径,否则第二个斜杠开始子路径。前缀是名称的一部分。

这并不完全相同,因为 PACKAGE_RESOLVE 中的子路径可能为空,而 LOAD_PACKAGE_EXPORTS 意味着子路径必须至少包含一个斜杠,但我愿意处理这个问题。

我没有解开第二个谜团;这可能只是由于另一个疏忽。

© www.soinside.com 2019 - 2024. All rights reserved.