Skip to content

Commit

Permalink
Sort manual chunks generated via a function by name (#4397)
Browse files Browse the repository at this point in the history
* Sort manual chunks via functions are sorted by name

* Improve test
  • Loading branch information
lukastaegert committed Feb 10, 2022
1 parent 5f4d04f commit 1738215
Show file tree
Hide file tree
Showing 15 changed files with 66 additions and 3 deletions.
11 changes: 9 additions & 2 deletions src/Bundle.ts
Expand Up @@ -156,7 +156,7 @@ export default class Bundle {
}

private assignManualChunks(getManualChunk: GetManualChunk): Map<Module, string> {
const manualChunkAliasByEntry = new Map<Module, string>();
const manualChunkAliasesWithEntry: [alias: string, module: Module][] = [];
const manualChunksApi = {
getModuleIds: () => this.graph.modulesById.keys(),
getModuleInfo: this.graph.getModuleInfo
Expand All @@ -165,10 +165,17 @@ export default class Bundle {
if (module instanceof Module) {
const manualChunkAlias = getManualChunk(module.id, manualChunksApi);
if (typeof manualChunkAlias === 'string') {
addModuleToManualChunk(manualChunkAlias, module, manualChunkAliasByEntry);
manualChunkAliasesWithEntry.push([manualChunkAlias, module]);
}
}
}
manualChunkAliasesWithEntry.sort(([aliasA], [aliasB]) =>
aliasA > aliasB ? 1 : aliasA < aliasB ? -1 : 0
);
const manualChunkAliasByEntry = new Map<Module, string>();
for (const [alias, module] of manualChunkAliasesWithEntry) {
addModuleToManualChunk(alias, module, manualChunkAliasByEntry);
}
return manualChunkAliasByEntry;
}

Expand Down
17 changes: 16 additions & 1 deletion test/chunking-form/samples/manual-chunks-function/_config.js
@@ -1,3 +1,5 @@
const assert = require('assert');

module.exports = {
description: 'allows to define manual chunks via a function',
options: {
Expand All @@ -8,6 +10,19 @@ module.exports = {
return `chunk-${id[id.length - 4]}`;
}
}
}
},
plugins: [
{
generateBundle(options, bundle) {
// This also asserts the sorting order, which should be alphabetical
// between the manual chunks
assert.deepStrictEqual(Object.keys(bundle), [
'main-a.js',
'generated-chunk-b.js',
'generated-chunk-c.js'
]);
}
}
]
}
};
Expand Up @@ -4,4 +4,8 @@ define((function () { 'use strict';

console.log('dep-b');

console.log('dep2-b');

console.log('dep3-b');

}));
Expand Up @@ -4,6 +4,10 @@ define(['./generated-chunk-c', './generated-chunk-b'], (function (chunkC, chunkB

console.log('dep-a');

console.log('dep2-a');

console.log('dep3-a');

console.log('main-a');

}));
Expand Up @@ -3,3 +3,7 @@
console.log('dep2');

console.log('dep-b');

console.log('dep2-b');

console.log('dep3-b');
Expand Up @@ -7,4 +7,8 @@ console.log('dep1');

console.log('dep-a');

console.log('dep2-a');

console.log('dep3-a');

console.log('main-a');
@@ -1,3 +1,7 @@
console.log('dep2');

console.log('dep-b');

console.log('dep2-b');

console.log('dep3-b');
Expand Up @@ -5,4 +5,8 @@ console.log('dep1');

console.log('dep-a');

console.log('dep2-a');

console.log('dep3-a');

console.log('main-a');
Expand Up @@ -7,6 +7,10 @@ System.register([], (function () {

console.log('dep-b');

console.log('dep2-b');

console.log('dep3-b');

})
};
}));
Expand Up @@ -8,6 +8,10 @@ System.register(['./generated-chunk-c.js', './generated-chunk-b.js'], (function

console.log('dep-a');

console.log('dep2-a');

console.log('dep3-a');

console.log('main-a');

})
Expand Down
@@ -0,0 +1 @@
console.log('dep2-a');
@@ -0,0 +1 @@
console.log('dep2-b');
@@ -0,0 +1 @@
console.log('dep3-a');
@@ -0,0 +1 @@
console.log('dep3-b');
5 changes: 5 additions & 0 deletions test/chunking-form/samples/manual-chunks-function/main-a.js
@@ -1,4 +1,9 @@
import './dep-c';
import './dep-a';
import './dep2-a'
import './dep3-a'
import './dep-b';
import './dep2-b'
import './dep3-b'

console.log('main-a');

0 comments on commit 1738215

Please sign in to comment.