问题描述:
- 本地组件库修改后,使用yalc publish发布;
- 在项目中执行yalc update更新组件库; 问题: webpack有重新构建,但构建后的内容没有变更
调试跟踪
- webpack/lib/Compliation.js
_buildModule(module, callback) { }
- webpack/lib/NormalModule.js
needBuild(context, callback) { }
- 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)
});
- 获取指定路径下的所有
_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是否有变更。