UNPKG

@morjs/utils

Version:
233 lines (232 loc) 7.81 kB
import type webpack from 'webpack'; import type { EntryFileType, EntryPriority, EntryType } from './constants'; import type { ModuleGraph } from './moduleGraph'; /** * entry 来源 * direct: 代表是 entryBuiler 主动添加 * dep: 代表是通过依赖分析添加 */ export declare type EntryReferType = 'direct' | 'dep'; declare type EntryFullPath = string; /** * 分包配置 */ interface ISubPackageConfig { root: string; pages: string[]; independent?: boolean; } /** * Entry 条目信息 */ export interface EntryItem { fullEntryName: string; /** * entry 名称 无后缀 * 这里 和给 webpack 使用的 entry 还有些区别, webpack 只有 js 文件无后缀 */ entryName: string; /** * fullEntryName 对应的文件夹地址 */ entryDir: string; /** * entry 引用来源 */ entryReferType: EntryReferType; /** * entry 类型 */ entryType: EntryType; /** * entry 文件类型 */ entryFileType: EntryFileType; /** * 相对于 srcPath 的路径, 可能包含条件后缀 * 仅做记录 */ relativePath: string; /** * 完整路径 */ fullPath: string; /** * 后缀名称 */ extname: string; /** * 筛选优先级 */ priority: EntryPriority; } export declare type EntrySources = Map<EntryFullPath, { source: webpack.sources.RawSource; saveToMemFile?: string; }>; /** * EntryBuilder 辅助函数 */ export interface EntryBuilderHelpers { /** * 所有的 entry 信息 * 这里的 EntryName 除 js 文件之外均包含后缀名 * EntryItem 中的 entryName 是不包含后缀名的 entry 相对路径 */ entries: Map<string, EntryItem>; /** * 全局 app 名称 */ globalAppName?: string; /** * 全局脚本文件 */ globalScriptFilePath?: string; /** * 全局样式文件 */ globalStyleFilePath?: string; /** * 全局配置文件 */ globalConfigFilePath?: string; /** * 用于记录 transfer 和 default 编译模式中 script 的文件内容 */ replaceEntrySources: EntrySources; /** * 用于生成 json 文件 */ additionalEntrySources: EntrySources; /** * 用到的 npm 包 * key 为 包名 * value 为 包地址 */ usedNpmPackages: Map<string, string>; /** * 独立分包配置 */ independentSubpackages: Map<string, ISubPackageConfig>; /** * app 入口 json 文件 */ appJson?: Record<string, any>; /** * subpackage 入口 json 文件 */ subpackageJson?: Record<string, any>; /** * plugin 入口 json 文件 */ pluginJson?: Record<string, any>; /** * 模块依赖图, 用于 bundle 分析 和 分组 */ moduleGraph: ModuleGraph; /** * 后缀名映射 */ extMap: Record<string, string>; /** * 基于路径获取 entry * @param filePath - 文件完整路径 */ getEntryByFilePath(filePath: string): EntryItem | undefined; /** * 获取 源 entry 和 目标 entry 的相对路径 * @param sourceEntry - 源 entry * @param targetEntry - 目标 entry * @param withExt - 是否携带后缀名 */ getRelativePathFor(sourceEntry: EntryItem, targetEntry: EntryItem, withExt?: boolean): string; /** * 获取引用路径对应的真实路径 * @param sourcePath - 源文件路径 * @param referencePath - 引用文件路径 * @param withExt - 是否携带后缀名 */ getRealReferencePath(sourcePath: string, referencePath: string, withExt?: boolean): string | undefined; /** * 获取引用文件的完整路径 * @param sourcePath - 源文件 * @param referencePath - 引用路径 */ getFullPathOfReferenceFile(sourcePath: string, referencePath: string): string | undefined; /** * 设置 entry 源码用于替换或额外输出 * @param entryName - entry 名称 * @param content - entry 内容 * @param aim - 目标, 可选值为 replace 或 additional * @param saveToMemFile - 需要输出为内存文件路径,aim 为 additional 时,如未提供 saveToMemFile, 则会基于 entryName 自动生成 */ setEntrySource(entryName: string, content: string, aim: 'replace' | 'additional', saveToMemFile?: string): void; /** * 获取 完整的 entry 名称 * @param filePath - 文件完整路径 * @returns */ getFullEntryName(filePath: string): string | undefined; /** * 通过文件地址获取使用的自定义组件名称数组 * @param filePath - 文件地址 * @returns 当前路径对应的 entry 可能使用到的自定义组件名称(包含全局组件) */ getUsingComponentNames(filePath: string): string[]; /** * 获取全局组件相对于当前引用文件的相对路径 * @param sourceEntry - 引用全局组件的 entry * @param globalComponentName - 全局组件的名称 * @returns 全局组件之于当前文件的相对路径 */ getGlobalComponentRelativePath(sourceEntry: EntryItem, globalComponentName: string): string | undefined; /** * 判断是否是 entry 文件 * @param filePath - 文件地址 */ isEntryFile(filePath: string): boolean; /** * 基于引用的名称添加相关的 entries * @param referencePath - 不包含后缀的引用路径, 如 ./components/index * @param entryType - 代表当前页面组件被谁引用 * @param parentEntry - 父级别 entry, 即引用当前文件的文件 * @param fileType - 文件类型 * @param groupName - 文件所在组 * @param entryReferType - 引用类型, 用于标识直接引用或间接引用, 默认为 `direct` * @param customEntryName - 自定义 entry 名称, 不带后缀名, 如 `pages/my/usercenter` * @param rootDirs - 文件检索根目录, 可选, 默认为 srcPaths * @param preferRelative - 是否倾向于按照相对目录解析组件 */ tryAddEntriesFromPageOrComponent(referencePath: string, entryType: EntryType, parentEntry: EntryItem, fileType?: EntryFileType, groupName?: string, entryReferType?: EntryReferType, customEntryName?: string, rootDirs?: string[], preferRelative?: boolean): Promise<void | EntryItem>; /** * 添加页面 entries * @param pages - 页面数组, 支持数组或对象, 对象可用于指定自定义 entry 名称 * @param parentEntry - 父级 entry * @param group - 分组名称 * @param rootDirs - 文件检索根目录, 可选, 默认为 srcPaths */ addPageEntries(pages: string[] | Record<string, string>, parentEntry: EntryItem, groupName?: string, rootDirs?: string[]): Promise<void>; /** * 添加组件 entries * @param components - 组件对象 * @param parentEntry - 上一级 EntryItem * @param rootDirs - 文件检索根目录, 可选, 默认为 srcPaths * @param preferRelative - 是否倾向于按照相对目录解析组件 */ addComponentEntries(components: Record<string, string>, parentEntry: EntryItem, rootDirs?: string[], preferRelative?: boolean): Promise<void>; /** * 替换文件后缀为期望的后缀,用于解决源代码后缀和目标产物文件后缀不同的情况 * @param filePath - 原始文件路径 * @returns 替换过后缀的文件路径 */ replaceExtAsExpected(filePath: string): string; /** * 通过 glob 的方式构建 entry * * @param globPattern - 模式 */ buildByGlob(globPattern?: string): Promise<void>; } export declare type Changeable<T> = { -readonly [k in keyof T]: T[k]; }; export {};