# this.getModuleInfo

类型:
(moduleId: string) => (ModuleInfo | null)
interface ModuleInfo {
	id: string; // 模块的 ID,方便使用
	code: string | null; // 模块的源代码,如果是外部模块或尚未可用,则为 `null`
	ast: ESTree.Program; // 如果可用,则为解析的抽象语法树
	hasDefaultExport: boolean | null; // 是否有默认导出,如果是外部模块或尚未可用,则为 `null`
	isEntry: boolean; // 是否为用户或插件定义的入口点
	isExternal: boolean; // 对于被引用但未包含在图形中的外部模块
	isIncluded: boolean | null; // 是否除屑优化后包含模块,如果是外部模块或尚未可用,则为 `null`
	importedIds: string[]; // 由此模块静态导入的模块 ID
	importedIdResolutions: ResolvedId[]; // 静态导入 ID 的解析方式,用于 this.load
	importers: string[]; // 静态导入此模块的所有模块的 ID
	exportedBindings: Record<string, string[]> | null; // 包含与 `from` 路径相关的所有导出变量,如果是外部模块,则为 `null`
	exports: string[] | null; // 所有导出变量,如果是外部模块,则为 `null`
	dynamicallyImportedIds: string[]; // 通过动态 import() 导入此模块的模块 ID
	dynamicallyImportedIdResolutions: ResolvedId[]; // 动态 import() 导入的 ID 的解析方式
	dynamicImporters: string[]; // 动态导入此模块的所有模块的 ID
	implicitlyLoadedAfterOneOf: string[]; // 隐式关系,通过 this.emitFile 声明
	implicitlyLoadedBefore: string[]; // 隐式关系,通过 this.emitFile 声明
	assertions: { [key: string]: string }; // 此模块的导入断言
	meta: { [plugin: string]: any }; // 自定义模块元数据
	moduleSideEffects: boolean | 'no-treeshake'; // 如果未从中导入任何内容,则是否包含此模块的导入
	syntheticNamedExports: boolean | string; // 合成命名导出的最终值
}

interface ResolvedId {
	id: string; // 导入模块的 ID
	external: boolean | 'absolute'; // 此模块是否为外部模块,“absolute”表示它不会在模块中呈现为相对路径
	assertions: { [key: string]: string }; // 此导入的导入断言
	meta: { [plugin: string]: any }; // 解析模块时的自定义模块元数据
	moduleSideEffects: boolean | 'no-treeshake'; // 是否观察到模块的副作用,是否启用了除屑优化
	resolvedBy: string; // 哪个插件解析了此模块,如果由 Rollup 自身解析,则为“rollup”
	syntheticNamedExports: boolean | string; // 模块是否允许导入不存在的命名导出
}

返回有关所讨论的模块的其他信息。

在构建期间,此对象表示有关模块的当前可用信息,但在 buildEnd 钩子之前可能不准确:

  • id 和 isExternal 永远不会更改。
  • code、ast、hasDefaultExport、exports 和 exportedBindings 仅在解析后可用,即在 moduleParsed 钩子中或在等待 this.load 后。此时,它们将不再更改。
  • 如果 isEntry 为 true,则它将不再更改。但是,模块可以在解析后通过 this.emitFile 或因为插件在解析入口点时通过 this.load 检查潜在入口点而成为入口点。因此,在 transform 钩子中不建议依赖此标志。在 buildEnd 之后,它将不再更改。
  • 同样,implicitlyLoadedAfterOneOf 可以在 buildEnd 之前通过 this.emitFile 随时接收其他条目。
  • importers、dynamicImporters 和 implicitlyLoadedBefore 将以空数组开始,随着发现新的导入者和隐式依赖项而接收其他条目。在 buildEnd 之后,它们将不再更改。
  • isIncluded 仅在 buildEnd 后可用,在此时它将不再更改。
  • 当模块已解析并解析其依赖项时,importedIds、importedIdResolutions、dynamicallyImportedIds 和 dynamicallyImportedIdResolutions 可用。这是在 moduleParsed 钩子中或在等待 this.load 时使用 resolveDependencies 标志的情况。此时,它们将不再更改。
  • assertions、meta、moduleSideEffects 和 syntheticNamedExports 可以通过 load 和 transform 钩子更改。此外,虽然大多数属性是只读的,但这些属性是可写的,如果在触发 buildEnd 钩子之前发生更改,则会捕获更改。meta 本身不应被覆盖,但随时可以突变其属性以存储有关模块的元信息。这样做的好处是,如果使用了缓存,例如从 CLI 使用观察模式,则 meta 将被持久化并从缓存中恢复。

如果找不到模块 ID,则返回 null。

Last Updated: 6/14/2023, 8:56:23 AM