This commit is contained in:
Tobias Koppers 2020-06-16 17:28:53 +02:00
parent eac7d290ca
commit ab01c0628e
9 changed files with 70 additions and 13 deletions

View File

@ -44,20 +44,30 @@ const similarity = (a, b) => {
/**
* @param {string} a key
* @param {string} b key
* @param {Set<string>} usedNames set of already used names
* @returns {string} the common part and a single char for the difference
*/
const getName = (a, b) => {
const getName = (a, b, usedNames) => {
const l = Math.min(a.length, b.length);
let r = "";
for (let i = 0; i < l; i++) {
const ca = a.charAt(i);
const cb = b.charAt(i);
r += ca;
if (ca === cb) {
continue;
let i = 0;
while (i < l) {
if (a.charCodeAt(i) !== b.charCodeAt(i)) {
i++;
break;
}
return r;
i++;
}
while (i < l) {
const name = a.slice(0, i);
const lowerName = name.toLowerCase();
if (!usedNames.has(lowerName)) {
usedNames.add(lowerName);
return name;
}
i++;
}
// names always contain a hash, so this is always unique
// we don't need to check usedNames nor add it
return a;
};
@ -391,12 +401,17 @@ module.exports = ({ maxSize, minSize, items, getSize, getKey }) => {
});
// give every group a name
const usedNames = new Set();
for (let i = 0; i < result.length; i++) {
const group = result[i];
const first = group.nodes[0];
const last = group.nodes[group.nodes.length - 1];
let name = getName(first.key, last.key);
group.key = name;
if (group.nodes.length === 1) {
group.key = group.nodes[0].key;
} else {
const first = group.nodes[0];
const last = group.nodes[group.nodes.length - 1];
const name = getName(first.key, last.key, usedNames);
group.key = name;
}
}
// return the results

View File

@ -0,0 +1,9 @@
import a from "./file-a1";
import b from "./file-b1";
import A from "./file-A2";
import B from "./file-B2";
export default "ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" +
a +
b +
A +
B;

View File

@ -0,0 +1 @@
export default "A2222222222222222222222";

View File

@ -0,0 +1 @@
export default "B2222222222222222222222";

View File

@ -0,0 +1 @@
export default "a1111111111111111111111";

View File

@ -0,0 +1 @@
export default "b1111111111111111111111";

View File

@ -0,0 +1,10 @@
it("should ignore case insenstive chars when generating maxSize filenames", () =>
import(/* webpackChunkName: "chunk" */ "./chunk").then(
({ default: value }) => {
expect(value).toContain("a111");
expect(value).toContain("b111");
expect(value).toContain("A222");
expect(value).toContain("B222");
expect(value).toContain("cccc");
}
));

View File

@ -0,0 +1,5 @@
module.exports = {
findBundle: function (i, options) {
return ["main.js"];
}
};

View File

@ -0,0 +1,14 @@
/** @type {import("../../../../").Configuration} */
module.exports = {
output: {
filename: "[name].js"
},
optimization: {
chunkIds: "named",
splitChunks: {
hidePathInfo: false,
minSize: 50,
maxSize: 100
}
}
};