Skip to content

Commit

Permalink
Merge pull request #16933 from scameron/deterministic-moduleids
Browse files Browse the repository at this point in the history
Fix non-deterministic moduleId assignment
  • Loading branch information
alexander-akait committed Apr 19, 2023
2 parents 5c522c4 + 56d4fb2 commit 4ff4d59
Show file tree
Hide file tree
Showing 10 changed files with 139 additions and 1 deletion.
2 changes: 1 addition & 1 deletion lib/ids/OccurrenceModuleIdsPlugin.js
Expand Up @@ -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;
};
Expand Down
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
10 changes: 10 additions & 0 deletions test/configCases/contenthash/module-ids-size/async.js
@@ -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;
}
19 changes: 19 additions & 0 deletions test/configCases/contenthash/module-ids-size/file-1.js
@@ -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();
5 changes: 5 additions & 0 deletions test/configCases/contenthash/module-ids-size/file-2.js
@@ -0,0 +1,5 @@
import { test } from "./file-1.js";

export default function foobar() {
return "test" + test();
}
7 changes: 7 additions & 0 deletions test/configCases/contenthash/module-ids-size/file-3.js
@@ -0,0 +1,7 @@
function test() {
return "test";
}

test();

module.exports = "test";
25 changes: 25 additions & 0 deletions test/configCases/contenthash/module-ids-size/file.js
@@ -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();
7 changes: 7 additions & 0 deletions test/configCases/contenthash/module-ids-size/index.js
@@ -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");
});
28 changes: 28 additions & 0 deletions test/configCases/contenthash/module-ids-size/test.config.js
@@ -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);
}
};
37 changes: 37 additions & 0 deletions test/configCases/contenthash/module-ids-size/webpack.config.js
@@ -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"
}
]
}
}
];

0 comments on commit 4ff4d59

Please sign in to comment.