关于webpack重构建的问题跟踪

464 阅读1分钟

问题描述:

  1. 本地组件库修改后,使用yalc publish发布;
  2. 在项目中执行yalc update更新组件库; 问题: webpack有重新构建,但构建后的内容没有变更

调试跟踪

  1. webpack/lib/Compliation.js
_buildModule(module, callback) { }
  1. webpack/lib/NormalModule.js
needBuild(context, callback) { }
  1. webpack/lib/FileSystemInfo
checkSnapshotValid(snapshot, callback) { }
_checkSnapshotValidNoCache(snapshot, callback) {
    ....
    this.managedItemQueue.add(path, (err, entry) => {});
    ...
}
this.managedItemQueue = new AsyncQueue({
	name: "managed item info",
	parallelism: 10,
	processor: this._getManagedItemInfo.bind(this)
});
_getManagedItemInfo(path, callback) {
    ...
    this.managedItemDirectoryQueue.add(dir, (err, elements) => { })
    ...
}
    this.managedItemDirectoryQueue = new AsyncQueue({
	name: "managed item directory info",
	parallelism: 10,
	processor: this._getManagedItemDirectoryInfo.bind(this)
   });

  1. 获取指定路径下的所有
_getManagedItemDirectoryInfo(path, callback) {
	this.fs.readdir(path, (err, elements) => {
		if (err) {
			if (err.code === "ENOENT" || err.code === "ENOTDIR") {
				return callback(null, EMPTY_SET);
			}
			return callback(err);
		}
		const set = new Set(
				/** @type {string[]} */ (elements).map(element =>
				join(this.fs, path, element)
			)
		);
		callback(null, set);
	});
}

问题解决方案

对于node_modules下面的组件,检查是否更新的原理是:检查组件根目录下的package.json里面的name和version是否有变更。