mirror of https://github.com/webpack/webpack.git
Merge pull request #16933 from scameron/deterministic-moduleids
Fix non-deterministic moduleId assignment
This commit is contained in:
commit
4ff4d59f8d
|
|
@ -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;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
@ -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();
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
import { test } from "./file-1.js";
|
||||
|
||||
export default function foobar() {
|
||||
return "test" + test();
|
||||
}
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
function test() {
|
||||
return "test";
|
||||
}
|
||||
|
||||
test();
|
||||
|
||||
module.exports = "test";
|
||||
|
|
@ -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();
|
||||
|
|
@ -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");
|
||||
});
|
||||
|
|
@ -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);
|
||||
}
|
||||
};
|
||||
|
|
@ -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"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
];
|
||||
Loading…
Reference in New Issue