Merge pull request #16933 from scameron/deterministic-moduleids

Fix non-deterministic moduleId assignment
This commit is contained in:
Alexander Akait 2023-04-19 18:12:12 +03:00 committed by GitHub
commit 4ff4d59f8d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 139 additions and 1 deletions

View File

@ -81,7 +81,7 @@ class OccurrenceModuleIdsPlugin {
] of moduleGraph.getIncomingConnectionsByOriginModule(module)) {
if (!originModule) continue;
if (!connections.some(c => c.isTargetActive(undefined))) continue;
sum += initialChunkChunkMap.get(originModule);
sum += initialChunkChunkMap.get(originModule) || 0;
}
return sum;
};

View File

@ -0,0 +1,10 @@
export default function test() {
const a = 1;
const b = 2;
const c = 3;
const d = 4;
const f = 5;
const e = 6;
return a + b + c + d + f + e;
}

View File

@ -0,0 +1,19 @@
async function test() {
const a = 1;
const b = 2;
const c = 3;
const d = 4;
const f = 5;
const e = 6;
await import("./async.js");
return a + b + c + d + f + e;
}
test();
export { test }
export default test;
test();

View File

@ -0,0 +1,5 @@
import { test } from "./file-1.js";
export default function foobar() {
return "test" + test();
}

View File

@ -0,0 +1,7 @@
function test() {
return "test";
}
test();
module.exports = "test";

View File

@ -0,0 +1,25 @@
import file from "./file-1.js";
import file2 from "./file-2.js";
async function test() {
const a = 1;
const b = 2;
const c = 3;
const d = 4;
const f = 5;
const e = 6;
await import(/* webpackMode: "eager" */"./async.js");
await import(/* webpackMode: "eager" */"./file-3.js");
return a + b + c + d + f + e;
}
test();
export { test, file, file2 }
export default function foo() {
return "test";
}
test();

View File

@ -0,0 +1,7 @@
import img from "./1.jpg";
import file from "./file.js";
it("should compile", () => {
expect(typeof img).toBe("string");
expect(typeof file).toBe("function");
});

View File

@ -0,0 +1,28 @@
const findOutputFiles = require("../../../helpers/findOutputFiles");
const allAssets = new Set();
const allBundles = new Set();
module.exports = {
findBundle: function (i, options) {
const bundle = findOutputFiles(options, new RegExp(`^bundle${i}`))[0];
allBundles.add(/\.([^.]+)\./.exec(bundle)[1]);
let asset;
switch (i) {
case 0:
asset = findOutputFiles(options, /^1\.[^.]*\.jpg$/, "img")[0];
break;
}
if (asset) allAssets.add(asset);
return `./${bundle}`;
},
afterExecute: () => {
// Bundles have the same contenthash
expect(allBundles.size).toBe(1);
}
};

View File

@ -0,0 +1,37 @@
/** @type {import("../../../../").Configuration} */
module.exports = [
{
output: {
filename: "bundle0.[contenthash].a.js",
assetModuleFilename: "img/[name].a.[contenthash][ext]"
},
optimization: {
moduleIds: "size"
},
module: {
rules: [
{
test: /\.jpg$/,
type: "asset/resource"
}
]
}
},
{
output: {
filename: "bundle1.[contenthash].b.js",
assetModuleFilename: "img/[name].a.[contenthash][ext]"
},
optimization: {
moduleIds: "size"
},
module: {
rules: [
{
test: /\.jpg$/,
type: "asset/resource"
}
]
}
}
];