mirror of https://github.com/webpack/webpack.git
fix a bug with experiments.cacheUnaffected
that causes missing invalidation for modules when only the module id has changed
This commit is contained in:
parent
86e3eb289f
commit
393fb6e22c
|
|
@ -2424,9 +2424,10 @@ BREAKING CHANGE: Asset processing hooks in Compilation has been merged into a si
|
||||||
let statNew = 0;
|
let statNew = 0;
|
||||||
/**
|
/**
|
||||||
* @param {Module} module module
|
* @param {Module} module module
|
||||||
* @returns {{ modules?: Map<Module, string | number | undefined>, blocks?: (string | number)[] }} references
|
* @returns {{ id: string | number, modules?: Map<Module, string | number | undefined>, blocks?: (string | number)[] }} references
|
||||||
*/
|
*/
|
||||||
const computeReferences = module => {
|
const computeReferences = module => {
|
||||||
|
const id = chunkGraph.getModuleId(module);
|
||||||
/** @type {Map<Module, string | number | undefined>} */
|
/** @type {Map<Module, string | number | undefined>} */
|
||||||
let modules = undefined;
|
let modules = undefined;
|
||||||
/** @type {(string | number)[] | undefined} */
|
/** @type {(string | number)[] | undefined} */
|
||||||
|
|
@ -2454,16 +2455,18 @@ BREAKING CHANGE: Asset processing hooks in Compilation has been merged into a si
|
||||||
queue.push.apply(queue, block.blocks);
|
queue.push.apply(queue, block.blocks);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return { modules, blocks };
|
return { id, modules, blocks };
|
||||||
};
|
};
|
||||||
/**
|
/**
|
||||||
* @param {Module} module module
|
* @param {Module} module module
|
||||||
* @param {Object} references references
|
* @param {Object} references references
|
||||||
|
* @param {string | number} references.id id
|
||||||
* @param {Map<Module, string | number>=} references.modules modules
|
* @param {Map<Module, string | number>=} references.modules modules
|
||||||
* @param {(string | number)[]=} references.blocks blocks
|
* @param {(string | number)[]=} references.blocks blocks
|
||||||
* @returns {boolean} ok?
|
* @returns {boolean} ok?
|
||||||
*/
|
*/
|
||||||
const compareReferences = (module, { modules, blocks }) => {
|
const compareReferences = (module, { id, modules, blocks }) => {
|
||||||
|
if (id !== chunkGraph.getModuleId(module)) return false;
|
||||||
if (modules !== undefined) {
|
if (modules !== undefined) {
|
||||||
for (const [module, id] of modules) {
|
for (const [module, id] of modules) {
|
||||||
if (chunkGraph.getModuleId(module) !== id) return false;
|
if (chunkGraph.getModuleId(module) !== id) return false;
|
||||||
|
|
@ -2489,7 +2492,7 @@ BREAKING CHANGE: Asset processing hooks in Compilation has been merged into a si
|
||||||
};
|
};
|
||||||
|
|
||||||
for (const [module, memCache] of moduleMemCaches) {
|
for (const [module, memCache] of moduleMemCaches) {
|
||||||
/** @type {{ references: { modules?: Map<Module, string | number | undefined>, blocks?: (string | number)[]}, memCache: WeakTupleMap<any[], any> }} */
|
/** @type {{ references: { id: string | number, modules?: Map<Module, string | number | undefined>, blocks?: (string | number)[]}, memCache: WeakTupleMap<any[], any> }} */
|
||||||
const cache = memCache.get(key);
|
const cache = memCache.get(key);
|
||||||
if (cache === undefined) {
|
if (cache === undefined) {
|
||||||
const memCache2 = new WeakTupleMap();
|
const memCache2 = new WeakTupleMap();
|
||||||
|
|
|
||||||
|
|
@ -2,8 +2,9 @@ import value from "./module";
|
||||||
import value2 from "./unrelated";
|
import value2 from "./unrelated";
|
||||||
import value3 from "./other-module";
|
import value3 from "./other-module";
|
||||||
|
|
||||||
it("should work when modules change ids", () => {
|
it("should work when modules change ids", async () => {
|
||||||
expect(value).toBe(42);
|
expect(value).toBe(42);
|
||||||
expect(value2).toBe(42);
|
expect(value2).toBe(42);
|
||||||
expect(value3).toBe(42 + +WATCH_STEP);
|
expect(value3).toBe(42 + +WATCH_STEP);
|
||||||
|
expect(import("./module?async")).resolves.toEqual(nsObj({ default: 42 }));
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -1 +1,2 @@
|
||||||
export { default } from "./module";
|
export { default } from "./module";
|
||||||
|
if (Math.random() < 0) import("./module?async");
|
||||||
|
|
|
||||||
|
|
@ -1 +1,2 @@
|
||||||
export { default } from "./module";
|
export { default } from "./module";
|
||||||
|
import "./module?async";
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,8 @@ module.exports = {
|
||||||
type: "memory"
|
type: "memory"
|
||||||
},
|
},
|
||||||
optimization: {
|
optimization: {
|
||||||
sideEffects: false
|
sideEffects: false,
|
||||||
|
providedExports: false
|
||||||
},
|
},
|
||||||
module: {
|
module: {
|
||||||
rules: [
|
rules: [
|
||||||
|
|
@ -16,6 +17,7 @@ module.exports = {
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
experiments: {
|
experiments: {
|
||||||
|
cacheUnaffected: true,
|
||||||
layers: true
|
layers: true
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue