UNPKG

@joker.front/cli

Version:

The Next-Generation Front-End Toolchain: Swift, Efficient, and Adaptive.

115 lines (114 loc) 3.84 kB
import type { ModuleInfo, PartialResolvedId } from "rollup"; import { Server } from "."; import { TransformResult } from "./transformRequest"; /** * 模块节点类 * * url 和id 的区别在于: * url是实际请求的url,id是通过插件进行转换标记后的唯一标志 * id默认值是url,它可以理解为是url的一个值的变种,比url参数更多,更精准 * 当然也可以通过插件来更改id指向,可能会指向不通的文件也可能路径不是一个路径 * * filePath 是url的一个无参数的指向,所以他的映射是一对多的关系 * * meta 是对module的标注, 提供插件方做标记和过滤分类用 */ export declare class ModuleNode { url: string; /** * id提供扩展用,默认为url,将由插件三方去自由扩展对文件进行特殊化标记 */ id?: string; file?: string; type: "css" | "js"; info?: ModuleInfo; /** * 模块meta标记,供插件做标注 */ meta?: Record<string, any>; lastHMRTimer: number; lastDisposeTimestamp: number; /** * 编译结果 */ transformResult?: TransformResult; /** 是否存在import.meta.hot.accept 自我处理程序 */ isSelfAccepting?: boolean; importers: Set<ModuleNode>; importedModules: Set<ModuleNode>; acceptedHMRDeps: Set<ModuleNode>; acceptedHMRExports: Set<string> | null; constructor(url: string, setDefaultSelfAcceping?: boolean); } export declare class ModuleMap { private server; private resolveIdCallBack; /** * URL -> 模块 映射表 */ urlModuleMap: Map<string, ModuleNode>; /** * moduleId -> 模块映射表 */ idModuleMap: Map<string, ModuleNode>; /** * 文件 -> 模块映射表 一个文件可能存在多版本多参数,多转换module */ fileModuleMap: Map<string, Set<ModuleNode>>; safeModulesPath: Set<string>; constructor(server: Server, resolveIdCallBack: (url: string) => Promise<PartialResolvedId | null>); /** * 根据id查询module * @param id * @returns */ getModuleById(id: string): ModuleNode | undefined; getModuleByUrl(strUrl: string): Promise<ModuleNode | undefined>; getModulesByFile(file: string): Set<ModuleNode> | undefined; /** * 作废一个module,只做销毁标记,清除过程产物,不做数据移除 * 不移除,留作后续可能会被重新执行 * @param module */ disposeModule(module: ModuleNode, isHmr?: boolean, timestamp?: number): void; /** *  作废所有module结果 */ disposeAllModule(): void; /** * 根据文件销毁相关Module * @param file */ disposeModuleByFile(file: string): void; /** * 根据url添加入口模块,存在则返回,没有则创建 * @param url * @returns */ addEntryModuleUrl(url: string, setDefaultSelfAcceping?: boolean): Promise<ModuleNode>; addEntryByFile(file: string): ModuleNode; /** * 对URL进行解析转换 * 1. 去除hmr 时间戳 * 2. 去除import query * 3. 去plugin中转换id以及meta * 4. 对url进行合理化转换 * @param url * @returns */ resolveUrl(url: string): Promise<{ url: string; id: string; meta?: Record<string, any> | null; }>; /** * 更新模块Node * @param module * @param importedModules * @param acceptedModules * @param acceptedExports * @param isSelfAccepting * @returns 返回去除的引用(不再使用的) */ updateModuleInfo(module: ModuleNode, importedModules: Set<string | ModuleNode>, acceptedModules: Set<string | ModuleNode>, acceptedExports: Set<string> | null, isSelfAccepting: boolean): Promise<Set<ModuleNode> | undefined>; }