解析算法


🌐 Resolution algorithm

当遇到一个裸指定符时:

🌐 When a bare specifier is encountered:

  1. Node.js 决定哪个包来处理解析请求。
    • 如果可能的话,应该向解析算法提供导入文件的包 ID。
    • 如果不行,解析器会检查文件路径是否在从它的 url 解码出来的任何包位置中。
  2. 如果没有提供包 ID,并且导入的文件不在任何映射的包中,就会抛出 ERR_PACKAGE_MAP_EXTERNAL_FILE 错误。
  3. Node.js 会在导入包的 dependencies 对象中查找指定符的包名,以找到对应的包键。
  4. 如果找到,解析算法会从包映射中的包的 url 字段定位目标包的位置。
  5. 如果指定符不在 dependencies 中,就会抛出 MODULE_NOT_FOUND 错误。
  6. 包的位置会转发到常规的 Node.js 解析算法来完成解析(index.js、exports 字段等)。

更多细节可以在归结算法伪代码中找到。

🌐 More details can be found in the resolution algorithm pseudo-code.