deprecatedNeedRebuild
函数总结
作用:
这是一个已废弃的兼容性函数 ,用于判断一个模块是否需要重新构建(rebuild),但它已经被新版的 module.needBuild(context)
所取代。
js
// ==== 类型导入:用于为 Webpack 的核心模块提供类型定义 ====
/** @typedef {import("webpack-sources").Source} Source */ // 表示源码资源的抽象结构
/** @typedef {import("../declarations/WebpackOptions").ResolveOptions} ResolveOptions */ // 模块解析配置
/** @typedef {import("../declarations/WebpackOptions").WebpackOptionsNormalized} WebpackOptions */ // 规范化后的 Webpack 配置
/** @typedef {import("./Chunk")} Chunk */ // 代表一个代码块(chunk)
/** @typedef {import("./ChunkGraph").ModuleId} ModuleId */ // 模块 ID 类型
/** @typedef {import("./ChunkGroup")} ChunkGroup */ // chunk 组,表示一组 chunk 的集合
/** @typedef {import("./CodeGenerationResults")} CodeGenerationResults */ // 所有模块的代码生成结果
/** @typedef {import("./Compilation")} Compilation */ // 整个构建过程上下文
/** @typedef {import("./Compilation").AssetInfo} AssetInfo */ // 每个输出资源(asset)的附加信息
/** @typedef {import("./ConcatenationScope")} ConcatenationScope */ // 模块拼接时的上下文信息
/** @typedef {import("./Dependency")} Dependency */ // 模块依赖
/** @typedef {import("./Dependency").UpdateHashContext} UpdateHashContext */ // 哈希更新上下文
/** @typedef {import("./DependencyTemplates")} DependencyTemplates */ // 各类型依赖的生成模板
/** @typedef {import("./ExportsInfo").UsageStateType} UsageStateType */ // 导出使用情况的状态类型
/** @typedef {import("./FileSystemInfo")} FileSystemInfo */ // 文件系统状态和缓存信息
/** @typedef {import("./FileSystemInfo").Snapshot} Snapshot */ // 文件系统快照,用于判断缓存是否可用
/** @typedef {import("./ModuleGraphConnection").ConnectionState} ConnectionState */ // 模块连接状态
/** @typedef {import("./ModuleTypeConstants").ModuleTypes} ModuleTypes */ // 模块类型定义
/** @typedef {import("./NormalModuleFactory")} NormalModuleFactory */ // 普通模块工厂
/** @typedef {import("./RequestShortener")} RequestShortener */ // 用于缩短路径显示
/** @typedef {import("./ResolverFactory").ResolverWithOptions} ResolverWithOptions */ // 带配置的解析器
/** @typedef {import("./RuntimeTemplate")} RuntimeTemplate */ // 运行时代码生成工具
/** @typedef {import("./WebpackError")} WebpackError */ // Webpack 错误类型
/** @typedef {import("./serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */ // 对象反序列化上下文
/** @typedef {import("./serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */ // 对象序列化上下文
/** @typedef {import("./util/Hash")} Hash */ // 哈希类
/** @template T @typedef {import("./util/LazySet")<T>} LazySet<T> */ // 延迟初始化的 Set
/** @template T @typedef {import("./util/SortableSet")<T>} SortableSet<T> */ // 可排序的 Set
/** @typedef {import("./util/fs").InputFileSystem} InputFileSystem */ // 输入文件系统(抽象)
/** @typedef {import("./util/runtime").RuntimeSpec} RuntimeSpec */ // 运行时代码的作用域规范
// ==== 类型定义:Webpack 构建过程的核心结构体 ====
// SourceContext:表示模块源码生成时所需的上下文
/**
* @typedef {object} SourceContext
* @property {DependencyTemplates} dependencyTemplates 依赖模板
* @property {RuntimeTemplate} runtimeTemplate 运行时代码模板
* @property {ModuleGraph} moduleGraph 模块依赖图
* @property {ChunkGraph} chunkGraph chunk 依赖图
* @property {RuntimeSpec} runtime 指定生成的运行时环境
* @property {string=} type 可选的源码类型(如 javascript、css)
*/
// SourceTypes:所有可能的源码类型集合
/** @typedef {ReadonlySet<string>} SourceTypes */
// CodeGenerationContext:代码生成阶段的上下文信息
/**
* @typedef {object} CodeGenerationContext
* @property {DependencyTemplates} dependencyTemplates 依赖模板
* @property {RuntimeTemplate} runtimeTemplate 运行时代码模板
* @property {ModuleGraph} moduleGraph 模块图
* @property {ChunkGraph} chunkGraph chunk 图
* @property {RuntimeSpec} runtime 所在运行时环境
* @property {ConcatenationScope=} concatenationScope 若为拼接模块,存储拼接上下文
* @property {CodeGenerationResults | undefined} codeGenerationResults 其他模块的生成结果(依赖 codeGenerationDependency)
* @property {Compilation=} compilation 当前构建上下文
* @property {SourceTypes=} sourceTypes 源码类型集合
*/
// ConcatenationBailoutReasonContext:模块拼接失败的上下文信息
/**
* @typedef {object} ConcatenationBailoutReasonContext
* @property {ModuleGraph} moduleGraph 模块图
* @property {ChunkGraph} chunkGraph chunk 图
*/
// 运行时需求集合
/** @typedef {Set<string>} RuntimeRequirements */
/** @typedef {ReadonlySet<string>} ReadOnlyRuntimeRequirements */
// CodeGenerationResult:单个模块生成代码的结果
/**
* @typedef {object} CodeGenerationResult
* @property {Map<string, Source>} sources 各源码类型对应的源代码对象
* @property {Map<string, any>=} data 附加数据(如 runtime 状态)
* @property {ReadOnlyRuntimeRequirements | null} runtimeRequirements 所需的运行时代码
* @property {string=} hash 结果哈希(可选,自动计算)
*/
// LibIdentOptions:用于生成库标识的选项
/**
* @typedef {object} LibIdentOptions
* @property {string} context 相对路径参考的上下文目录
* @property {object=} associatedObjectForCache 缓存相关对象
*/
// KnownBuildMeta:模块静态构建元信息
/**
* @typedef {object} KnownBuildMeta
* @property {("default" | "namespace" | "flagged" | "dynamic")=} exportsType 导出类型
* @property {(false | "redirect" | "redirect-warn")=} defaultObject 默认导出对象行为
* @property {boolean=} strictHarmonyModule 是否为严格 ESM 模块
* @property {boolean=} async 是否为异步模块
* @property {boolean=} sideEffectFree 是否无副作用
* @property {Record<string, string>=} exportsFinalName 最终导出名映射
*/
// KnownBuildInfo:模块动态构建信息(构建时状态)
/**
* @typedef {object} KnownBuildInfo
* @property {boolean=} cacheable 是否可缓存
* @property {boolean=} parsed 是否已解析
* @property {string=} moduleArgument 模块参数名
* @property {string=} exportsArgument 导出参数名
* @property {boolean=} strict 是否为严格模式
* @property {string=} moduleConcatenationBailout 拼接失败原因
* @property {LazySet<string>=} fileDependencies 文件依赖
* @property {LazySet<string>=} contextDependencies 上下文依赖
* @property {LazySet<string>=} missingDependencies 缺失依赖
* @property {LazySet<string>=} buildDependencies 构建依赖
* @property {ValueCacheVersions=} valueDependencies 缓存值依赖
* @property {TODO=} hash 哈希值(待补充)
* @property {Record<string, Source>=} assets 构建生成的资源
* @property {Map<string, AssetInfo | undefined>=} assetsInfo 每个资源的附加信息
* @property {(Snapshot | null)=} snapshot 文件系统快照
*/
// BuildMeta/BuildInfo:为 Known 类型扩展任意属性
/** @typedef {KnownBuildMeta & Record<string, any>} BuildMeta */
/** @typedef {KnownBuildInfo & Record<string, any>} BuildInfo */
// FactoryMeta:模块工厂的元信息
/** @typedef {object} FactoryMeta
* @property {boolean=} sideEffectFree 是否无副作用
*/
// UnsafeCacheData:模块缓存时存储的元数据
/** @typedef {{ factoryMeta: FactoryMeta | undefined, resolveOptions: ResolveOptions | undefined }} UnsafeCacheData */
// ValueCacheVersions:模块缓存值依赖映射
/** @typedef {Map<string, string | Set<string>>} ValueCacheVersions */
// NeedBuildContext:模块是否需要重新构建的上下文
/**
* @typedef {object} NeedBuildContext
* @property {Compilation} compilation 构建上下文
* @property {FileSystemInfo} fileSystemInfo 文件系统状态信息
* @property {ValueCacheVersions} valueCacheVersions 缓存依赖
*/
// OptimizationBailoutFunction:优化失败原因的格式化函数
/** @typedef {(requestShortener: RequestShortener) => string} OptimizationBailoutFunction */
// ==== 常量定义 ====
// 空的 resolve 配置对象(默认使用)
const EMPTY_RESOLVE_OPTIONS = {};
// 调试 ID 初始值(用于模块唯一标识)
let debugId = 1000;
// 默认的源码类型集合,表示未知类型
const DEFAULT_TYPES_UNKNOWN = new Set(["unknown"]);
// ==== 弃用 API 封装 ====
// 包装旧的 needRebuild 方法(已弃用,建议使用 needBuild 替代)
const deprecatedNeedRebuild = util.deprecate(
/**
* 判断模块是否需要重新构建(旧方法)
* @param {Module} module 模块对象
* @param {NeedBuildContext} context 构建上下文
* @returns {boolean} 是否需要重新构建
*/
(module, context) =>
module.needRebuild(
context.fileSystemInfo.getDeprecatedFileTimestamps(),
context.fileSystemInfo.getDeprecatedContextTimestamps()
),
"Module.needRebuild is deprecated in favor of Module.needBuild", // 警告提示内容
"DEP_WEBPACK_MODULE_NEED_REBUILD" // 弃用编号
);