Skip to content

Commit 9bd3e37

Browse files
feat(src): Flush chunks by ID
resolving chunk using aggressive code splitting and chunking with IDs and not chunknames BREAKING CHANGE: Significent changes to internal resolution system.
1 parent 88dbc97 commit 9bd3e37

File tree

3 files changed

+39
-24
lines changed

3 files changed

+39
-24
lines changed

__tests__/flushChunks.test.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -229,7 +229,7 @@ describe('unit tests', () => {
229229
bootstrap: ['bootstrap.js'],
230230
main: ['main.js', 'main.css']
231231
}
232-
const outputFiles = filesFromChunks(entryNames, assetsByChunkName)
232+
const outputFiles = filesFromChunks(entryNames, { assetsByChunkName })
233233

234234
expect(outputFiles).toEqual(['bootstrap.js', 'main.js', 'main.css'])
235235
})

package.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@
55
"main": "dist/flushChunks.js",
66
"typings": "index.d.ts",
77
"author": "James Gillmore <[email protected]>",
8+
"contributors": [
9+
"Zack Jackson <[email protected]>"
10+
],
811
"license": "MIT",
912
"scripts": {
1013
"build": "babel src -d dist",

src/flushChunks.js

Lines changed: 35 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -62,9 +62,7 @@ export default (stats: Stats, opts: Options): Api =>
6262

6363
const flushChunks = (stats: Stats, isWebpack: boolean, opts: Options = {}) => {
6464
const beforeEntries = opts.before || defaults.before
65-
const { assetsByChunkName, namedChunkGroups } = stats
66-
const ffc = (assets, isWebpack = false) =>
67-
filesFromChunks(assets, assetsByChunkName, namedChunkGroups, isWebpack)
65+
const ffc = (assets, isWebpack) => filesFromChunks(assets, stats, isWebpack)
6866

6967
const jsBefore = ffc(beforeEntries)
7068

@@ -92,11 +90,7 @@ const flushFiles = (stats: Stats, opts: Options2) =>
9290

9391
const flushFilesPure = (stats: Stats, isWebpack: boolean, opts: Options2) => {
9492
const files = opts.chunkNames
95-
? filesFromChunks(
96-
opts.chunkNames,
97-
stats.assetsByChunkName,
98-
stats.namedChunkGroups
99-
)
93+
? filesFromChunks(opts.chunkNames, stats)
10094
: flush(opts.moduleIds || [], stats, opts.rootDir, isWebpack)
10195

10296
const filter = opts.filter
@@ -181,6 +175,17 @@ const createFilesByModuleId = (stats: Stats): FilesMap => {
181175
}, {})
182176
}
183177

178+
const findChunkById = ({ chunks }) => {
179+
if (!chunks) {
180+
return {}
181+
}
182+
const filesByChunk = chunks.reduce((chunks, chunk) => {
183+
chunks[chunk.id] = chunk.files
184+
return chunks
185+
}, {})
186+
return filesByChunk
187+
}
188+
184189
/** HELPERS */
185190

186191
const isUnique = (v: string, i: number, self: Files): boolean =>
@@ -198,11 +203,12 @@ const concatFilesAtKeys = (
198203
[]
199204
)
200205

201-
const filesByChunkName = (name, assetsByChunkName) => {
202-
if (!assetsByChunkName || !assetsByChunkName[name]) {
206+
const filesByChunkName = (name, namedChunkGroups) => {
207+
if (!namedChunkGroups || !namedChunkGroups[name]) {
203208
return [name]
204209
}
205-
return assetsByChunkName[name].chunks
210+
211+
return namedChunkGroups[name].chunks
206212
}
207213

208214
const hasChunk = (entry, assets, checkChunkNames) => {
@@ -218,41 +224,47 @@ const hasChunk = (entry, assets, checkChunkNames) => {
218224

219225
const chunksToResolve = ({
220226
chunkNames,
221-
assetsByChunkName,
222-
assets,
227+
stats,
223228
checkChunkNames
224229
}: {
225230
chunkNames: Files,
226-
assets: FilesMap,
227-
assetsByChunkName: Object,
231+
stats: Object,
228232
checkChunkNames?: boolean
229233
}): Array<string> =>
230234
chunkNames
231235
.reduce((names, name) => {
232-
if (!hasChunk(name, assets, checkChunkNames)) {
236+
if (!hasChunk(name, stats.assetsByChunkName, checkChunkNames)) {
233237
return names
234238
}
235-
const files = filesByChunkName(name, assetsByChunkName)
239+
const files = filesByChunkName(name, stats.namedChunkGroups)
236240
names.push(...files)
237241
return names
238242
}, [])
239243
.filter(isUnique)
240244

241245
const filesFromChunks = (
242246
chunkNames: Files,
243-
assets: FilesMap,
244-
assetsByChunkName: Object,
247+
stats: Object,
245248
checkChunkNames?: boolean
246249
): Files => {
247-
const entryToFiles = entry => assets[entry] || assets[`${entry}-`]
250+
const chunksByID = findChunkById(stats)
251+
252+
const entryToFiles = entry => {
253+
if (typeof entry === 'number') {
254+
return chunksByID[entry]
255+
}
256+
return (
257+
stats.assetsByChunkName[entry] || stats.assetsByChunkName[`${entry}-`]
258+
)
259+
}
260+
248261
const chunksWithAssets = chunksToResolve({
249262
chunkNames,
250-
assetsByChunkName,
251-
assets,
263+
stats,
252264
checkChunkNames
253265
})
254266

255-
return [].concat(...chunksWithAssets.map(entryToFiles))
267+
return [].concat(...chunksWithAssets.map(entryToFiles)).filter(chunk => chunk)
256268
}
257269

258270
/** EXPORTS FOR TESTS */

0 commit comments

Comments
 (0)