load(url, context, nextLoad)
加载器 API 正在重新设计。此钩子可能会消失或其签名可能会更改。请不要依赖下面描述的 API。
在此 API 的早期版本中,这被拆分成三个独立的、现已弃用的钩子(
getFormat、getSource和transformSource)。
url<string>resolve链返回的 URLcontext<Object>conditions<string[]> 相关package.json的导出条件format<string> | <null> | <undefined>resolve钩子链可选择提供的格式importAssertions<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 内置(核心)模块的值。source 的值在类型 'commonjs' 下也会被忽略,因为 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 钩子提供了一种定义自定义方法以获取 ES 模块标识符的源代码的方式。这允许加载器有可能避免从磁盘读取文件。它也可以用于将未识别的格式映射到受支持的格式,例如将 yaml 映射为 module。
🌐 The load hook provides a way to define a custom method for retrieving the
source code of an ES module specifier. 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).