webpack 模块 第 六 节

makeSerializable(Module, "webpack/lib/Module");

作用:

使 Module 类可以被序列化(用于缓存、持久化等功能)。


hasEqualsChunks 属性

作用:

旧属性名,已被重命名为 hasEqualChunks

**行为:**访问该属性会抛出异常,提示使用新方法。

**目的:**引导开发者升级代码。


isUsed 属性

作用:

旧属性名,功能已拆分为多个新方法:getUsedNameisExportUsedisModuleUsed

**行为:**访问时抛出异常,提示使用新 API。

**目的:**帮助开发者迁移到更精细的使用状态判断。


errors 属性

作用:

旧 API,用于获取模块构建错误。

**行为:**通过 util.deprecate 标记为废弃,并提示使用 getErrors()。仍保留实际功能以确保兼容性。

**目的:**平滑过渡到新 API。


warnings 属性

作用:

旧 API,用于获取模块构建警告。

**行为:**通过 util.deprecate 标记为废弃,并提示使用 getWarnings()。保留旧功能。

**目的:**与 errors 同理,平稳废弃过程。


used 属性(含 getter 和 setter)

作用:

旧属性用于标记模块是否"被使用";现在应通过 ModuleGraph 管理模块使用状态。

**行为:**访问或设置该属性都会抛出异常,提示使用新接口:

  • ModuleGraph.getUsedExports()
  • ModuleGraph.setUsedExports()
    **目的:**鼓励使用更结构化的模块关系管理系统。
js 复制代码
// 将 Module 类设置为可序列化,以便在 Webpack 的缓存等机制中被正确处理。
// makeSerializable 是 Webpack 内部用于持久化对象状态的工具函数。
makeSerializable(Module, "webpack/lib/Module");

// TODO: 在 Webpack 6 中移除以下兼容性属性。
// 添加对 Module.prototype.hasEqualsChunks 的访问器属性(getter)
// 这是为了向后兼容旧版本插件/代码中仍然使用 hasEqualsChunks 的情况。
// 一旦访问这个属性,就会抛出异常,提示用户使用新的 API。
Object.defineProperty(Module.prototype, "hasEqualsChunks", {
	get() {
		throw new Error(
			"Module.hasEqualsChunks was renamed (use hasEqualChunks instead)"
		);
	}
});

// TODO: 在 Webpack 6 中移除该属性。
// 向后兼容旧 API isUsed 的 getter,访问时提示使用新的替代方法。
// 提示开发者使用更明确的命名方式:getUsedName、isExportUsed 或 isModuleUsed。
Object.defineProperty(Module.prototype, "isUsed", {
	get() {
		throw new Error(
			"Module.isUsed was renamed (use getUsedName, isExportUsed or isModuleUsed instead)"
		);
	}
});

// TODO: 在 Webpack 6 中移除。
// 向后兼容 Module.errors 属性,该属性以前用于访问模块的错误信息。
// 使用 Node.js 的 util.deprecate 提示用户该属性已被废弃。
// 实际上仍然保留对 this._errors 的访问逻辑,以保持旧代码兼容。
Object.defineProperty(Module.prototype, "errors", {
	get: util.deprecate(
		/**
		 * @this {Module}
		 * @returns {WebpackError[]} array
		 */
		function () {
			if (this._errors === undefined) {
				this._errors = [];
			}
			return this._errors;
		},
		"Module.errors was removed (use getErrors instead)", // 废弃提示信息
		"DEP_WEBPACK_MODULE_ERRORS" // 废弃标识码
	)
});

// TODO: 在 Webpack 6 中移除。
// 与上面的 errors 类似,这是为了兼容旧 API:Module.warnings。
// 同样使用 util.deprecate,并保留对内部 this._warnings 的实际支持。
Object.defineProperty(Module.prototype, "warnings", {
	get: util.deprecate(
		/**
		 * @this {Module}
		 * @returns {WebpackError[]} array
		 */
		function () {
			if (this._warnings === undefined) {
				this._warnings = [];
			}
			return this._warnings;
		},
		"Module.warnings was removed (use getWarnings instead)",
		"DEP_WEBPACK_MODULE_WARNINGS"
	)
});

// TODO: 在 Webpack 6 中移除。
// 提供对已废弃属性 Module.used 的访问和赋值接口。
// 访问或设置该属性都会抛出异常,提示使用新的模块图(ModuleGraph)API。
// ModuleGraph 是 Webpack 新的模块依赖追踪系统,提供更细粒度的状态管理。
Object.defineProperty(Module.prototype, "used", {
	get() {
		throw new Error(
			"Module.used was refactored (use ModuleGraph.getUsedExports instead)"
		);
	},
	set(value) {
		throw new Error(
			"Module.used was refactored (use ModuleGraph.setUsedExports instead)"
		);
	}
});
相关推荐
审小匠OpenCPAi9 小时前
银行流水核查怎么自动化?单边匹配、双向勾稽与图聚类异常检测的工程对比
java·前端·人工智能·python·审计
Revolution619 小时前
一个公共表格组件,是怎么一步步失控的
前端·前端工程化
腻害兔9 小时前
【若依项目-产品经理视角】RuoYi-Vue-Pro 源码拆解:CRM 客户关系模块深度解析——从线索到回款,一套完整的 B2B 销售闭环是怎么搭的?
java·前端·javascript·vue.js·产品经理·ai编程
whyfail10 小时前
前端学 Spring Boot(2):一次点击,如何穿过整个后端?
前端·spring boot·后端
AI多Agent协作实战派10 小时前
AI多Agent协作系统实战(二十三):Agent读HEARTBEAT.md不读AGENTS.md——openclaw的文件加载之谜
前端·数据库·人工智能·uni-app
2601_9557600711 小时前
如何用 Claude Opus 5 API 批量扩展长尾关键词和文章选题
前端·python·搜索引擎
KaMeidebaby11 小时前
卡梅德生物技术快报|bli亲和力检测gst:告别批量跑胶:BLI实时酶切监测技术加速GST融合蛋白下游流程优化
前端·网络·数据库·人工智能·算法
触底反弹12 小时前
🚀 删了数据刷新又回来?3 组件 × 4 回调 × 3 坑讲透 React 父子通信
前端·javascript·react.js
耳东小鹿13 小时前
对象常用方法
前端
程序员海军13 小时前
一个 AI 应用开发程序员的一天,都在屏幕前忙些什么?
前端·后端·程序员