load(url, context, nextLoad)
url<string>resolve链返回的 URLcontext<Object>conditions<string[]> 导出相关package.json的条件format<string> | <null> | <undefined> 由resolve钩子链可选提供的格式importAttributes<Object>
nextLoad<Function> 链中后续的load钩子,或在最后一个用户提供的load钩子之后的 Node.js 默认load钩子- 返回:<Object>
format<string>shortCircuit<undefined> | <boolean> 一个信号,表示此钩子打算终止resolve钩子的链条。默认值:falsesource<string> | <ArrayBuffer> | <TypedArray> Node.js 用于评估的源代码
load 钩子提供了一种定义自定义方法的方法,用于确定 URL 应该如何被解释、获取和解析。它还负责验证导入断言。
🌐 The load hook provides a way to define a custom method of determining how a
URL should be interpreted, retrieved, and parsed. It is also in charge of
validating the import assertion.
format 的最终值必须是以下之一:
🌐 The final value of format must be one of the following:
format | 描述 | load 返回的 source 可接受类型 |
|---|---|---|
'builtin' | 加载 Node.js 内置模块 | 不适用 |
'commonjs' | 加载 Node.js CommonJS 模块 | 不适用 |
'json' | 加载 JSON 文件 | { string, ArrayBuffer, TypedArray } |
'module' | 加载 ES 模块 | { string, ArrayBuffer, TypedArray } |
'wasm' | 加载 WebAssembly 模块 | { ArrayBuffer, TypedArray } |
source 的值会被忽略,类型为 'builtin',因为目前无法替换 Node.js 内置(核心)模块的值。类型为 'commonjs' 时,source 的值也会被忽略,因为 CommonJS 模块加载器不提供让 ES 模块加载器覆盖 CommonJS 模块返回值 的机制。这个限制在未来可能会被克服。
🌐 The value of source is ignored for type 'builtin' because currently it is
not possible to replace the value of a Node.js builtin (core) module. The value
of source is ignored for type 'commonjs' because the CommonJS module loader
does not provide a mechanism for the ES module loader to override the
CommonJS module return value. This limitation
might be overcome in the future.
警告:ESM 的
load钩子与来自 CommonJS 模块的命名导出不兼容。尝试将它们一起使用将导致从导入中得到一个空对象。未来可能会解决这个问题。
这些类型都对应于 ECMAScript 中定义的类。
- 特定的
ArrayBuffer对象是一个SharedArrayBuffer。 - 特定的
TypedArray对象是一个Uint8Array。
如果基于文本的格式(即 'json'、'module')的源值不是字符串,它将使用 util.TextDecoder 转换为字符串。
🌐 If the source value of a text-based format (i.e., 'json', 'module')
is not a string, it is converted to a string using util.TextDecoder.
load 钩子提供了一种方式来定义用于获取已解析 URL 源代码的自定义方法。这允许加载器在潜在情况下避免从磁盘读取文件。它也可以用于将无法识别的格式映射为受支持的格式,例如将 yaml 映射为 module。
🌐 The load hook provides a way to define a custom method for retrieving the
source code of a resolved URL. This would allow a loader to potentially avoid
reading files from disk. It could also be used to map an unrecognized format to
a supported one, for example yaml to module.
export async function load(url, context, nextLoad) {
const { format } = context;
if (Math.random() > 0.5) { // Some condition
/*
For some or all URLs, do some custom logic for retrieving the source.
Always return an object of the form {
format: <string>,
source: <string|buffer>,
}.
*/
return {
format,
shortCircuit: true,
source: '...',
};
}
// Defer to the next hook in the chain.
return nextLoad(url);
} 在更高级的场景中,这也可以用来将不受支持的源转换为受支持的源(见下方示例)。
🌐 In a more advanced scenario, this can also be used to transform an unsupported source to a supported one (see Examples below).