Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 31 additions & 2 deletions __fixtures__/stats.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,15 +22,44 @@ const chunk3Files = [
'2.no_css.js.map',
'2.css.map'
]
const chunk4Files = [
'3.js',
'3.no_css.js',
'3.css',
'3.js.map',
'3.no_css.js.map',
'3.css.map'
]

export const stats = {
assetsByChunkName: {
bootstrap: ['bootstrap.js', 'bootstrap.no_css.js'],
'bootstrap~..arbitrary': [
'bootstrap~..arbitrary.js',
'bootstrap~..arbitrary.no_css.js'
],
vendor: ['vendor.js', 'vendor.no_css.js'],
main: ['main.js', 'main.no_css.js', 'main.css'],
chunk1: chunk1Files,
'chunk1~common1': chunk1Files,
'chunk1~common2': chunk4Files,
chunk2: chunk2Files
},
namedChunkGroups: {
bootstrap: {
chunks: ['bootstrap~..arbitrary']
},
vendor: {
chunks: ['vendor']
},
main: {
chunks: ['main']
},
chunk1: {
chunks: ['chunk1~common1', 'chunk1~common2']
},
chunk2: {
chunks: ['chunk2']
}
},
chunks: [
{
id: 0,
Expand Down
3 changes: 2 additions & 1 deletion __tests__/__snapshots__/createApiWithCss.test.js.snap
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,8 @@ Array [

exports[`unit tests createCssHash() 1`] = `
Object {
"chunk1": "/static/0.css",
"chunk1~common1": "/static/0.css",
"chunk1~common2": "/static/3.css",
"chunk2": "/static/1.css",
"main": "/static/main.css",
}
Expand Down
45 changes: 35 additions & 10 deletions __tests__/__snapshots__/flushChunks.test.js.snap
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,8 @@ Object {
"toString": [Function],
},
"cssHashRaw": Object {
"chunk1": "/static/0.css",
"chunk1~common1": "/static/0.css",
"chunk1~common2": "/static/3.css",
"chunk2": "/static/1.css",
"main": "/static/main.css",
},
Expand All @@ -23,9 +24,10 @@ Object {
"outputPath": undefined,
"publicPath": "/static",
"scripts": Array [
"bootstrap.no_css.js",
"bootstrap~..arbitrary.no_css.js",
"vendor.no_css.js",
"0.no_css.js",
"3.no_css.js",
"1.no_css.js",
"main.no_css.js",
],
Expand All @@ -35,6 +37,7 @@ Object {
"stylesheets": Array [
"main.css",
"0.css",
"3.css",
"1.css",
],
}
Expand All @@ -53,7 +56,8 @@ Object {
"toString": [Function],
},
"cssHashRaw": Object {
"chunk1": "/static/0.css",
"chunk1~common1": "/static/0.css",
"chunk1~common2": "/static/3.css",
"chunk2": "/static/1.css",
"main": "/static/main.css",
},
Expand All @@ -63,7 +67,7 @@ Object {
"outputPath": undefined,
"publicPath": "/static",
"scripts": Array [
"bootstrap.no_css.js",
"bootstrap~..arbitrary.no_css.js",
"vendor.no_css.js",
"0.no_css.js",
"1.no_css.js",
Expand Down Expand Up @@ -95,7 +99,8 @@ Object {
"toString": [Function],
},
"cssHashRaw": Object {
"chunk1": "/static/0.css",
"chunk1~common1": "/static/0.css",
"chunk1~common2": "/static/3.css",
"chunk2": "/static/1.css",
"main": "/static/main.css",
},
Expand Down Expand Up @@ -136,7 +141,8 @@ Object {
"toString": [Function],
},
"cssHashRaw": Object {
"chunk1": "/static/0.css",
"chunk1~common1": "/static/0.css",
"chunk1~common2": "/static/3.css",
"chunk2": "/static/1.css",
"main": "/static/main.css",
},
Expand All @@ -146,9 +152,10 @@ Object {
"outputPath": undefined,
"publicPath": "/static",
"scripts": Array [
"bootstrap.no_css.js",
"bootstrap~..arbitrary.no_css.js",
"vendor.no_css.js",
"0.no_css.js",
"3.no_css.js",
"1.no_css.js",
"main.no_css.js",
],
Expand All @@ -158,6 +165,7 @@ Object {
"stylesheets": Array [
"main.css",
"0.css",
"3.css",
"1.css",
],
}
Expand All @@ -176,7 +184,8 @@ Object {
"toString": [Function],
},
"cssHashRaw": Object {
"chunk1": "/static/0.css",
"chunk1~common1": "/static/0.css",
"chunk1~common2": "/static/3.css",
"chunk2": "/static/1.css",
"main": "/static/main.css",
},
Expand All @@ -186,7 +195,7 @@ Object {
"outputPath": undefined,
"publicPath": "/static",
"scripts": Array [
"bootstrap.no_css.js",
"bootstrap~..arbitrary.no_css.js",
"vendor.no_css.js",
"0.no_css.js",
"1.no_css.js",
Expand Down Expand Up @@ -218,7 +227,8 @@ Object {
"toString": [Function],
},
"cssHashRaw": Object {
"chunk1": "/static/0.css",
"chunk1~common1": "/static/0.css",
"chunk1~common2": "/static/3.css",
"chunk2": "/static/1.css",
"main": "/static/main.css",
},
Expand Down Expand Up @@ -254,6 +264,12 @@ Array [
"0.js.map",
"0.no_css.js.map",
"0.css.map",
"3.js",
"3.no_css.js",
"3.css",
"3.js.map",
"3.no_css.js.map",
"3.css.map",
"1.js",
"1.no_css.js",
"1.css",
Expand Down Expand Up @@ -289,20 +305,23 @@ Array [
exports[`flushFiles() called as a pure function filter: by function 1`] = `
Array [
"0.css",
"3.css",
"1.css",
]
`;

exports[`flushFiles() called as a pure function filter: by regex 1`] = `
Array [
"0.css",
"3.css",
"1.css",
]
`;

exports[`flushFiles() called as a pure function filter: by string (file extension) 1`] = `
Array [
"0.css",
"3.css",
"1.css",
]
`;
Expand All @@ -315,6 +334,12 @@ Array [
"0.js.map",
"0.no_css.js.map",
"0.css.map",
"3.js",
"3.no_css.js",
"3.css",
"3.js.map",
"3.no_css.js.map",
"3.css.map",
"1.js",
"1.no_css.js",
"1.css",
Expand Down
14 changes: 11 additions & 3 deletions __tests__/flushChunks.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import {
isUnique,
normalizePath,
concatFilesAtKeys,
filesFromChunks
assetsFromChunkGroups
} from '../src/flushChunks'

import {
Expand Down Expand Up @@ -223,13 +223,21 @@ describe('unit tests', () => {
expect(files).toEqual(['0.js', '0.css', '2.js', '2.css'])
})

test('filesFromChunks()', () => {
test('assetsFromChunkGroups()', () => {
const entryNames = ['bootstrap', 'vendor', 'main']
const assetsByChunkName = {
bootstrap: ['bootstrap.js'],
main: ['main.js', 'main.css']
}
const outputFiles = filesFromChunks(entryNames, { assetsByChunkName })
const namedChunkGroups = {
bootstrap: { chunks: ['bootstrap'] },
main: { chunks: ['main'] },
vendor: { chunks: ['vendor'] }
}
const outputFiles = assetsFromChunkGroups(entryNames, {
assetsByChunkName,
namedChunkGroups
})

expect(outputFiles).toEqual(['bootstrap.js', 'main.js', 'main.css'])
})
Expand Down
32 changes: 17 additions & 15 deletions src/flushChunks.js
Original file line number Diff line number Diff line change
Expand Up @@ -62,16 +62,17 @@ export default (stats: Stats, opts: Options): Api =>

const flushChunks = (stats: Stats, isWebpack: boolean, opts: Options = {}) => {
const beforeEntries = opts.before || defaults.before
const ffc = (assets, isWebpack) => filesFromChunks(assets, stats, isWebpack)
const afc = (chunkGroupNames, isWebpack) =>
assetsFromChunkGroups(chunkGroupNames, stats, isWebpack)

const jsBefore = ffc(beforeEntries)
const jsBefore = afc(beforeEntries)

const files = opts.chunkNames
? ffc(opts.chunkNames, true)
? afc(opts.chunkNames, true)
: flush(opts.moduleIds || [], stats, opts.rootDir, isWebpack)

const afterEntries = opts.after || defaults.after
const jsAfter = ffc(afterEntries)
const jsAfter = afc(afterEntries)

return createApiWithCss(
[...jsBefore, ...files, ...jsAfter].filter(isUnique),
Expand All @@ -90,7 +91,7 @@ const flushFiles = (stats: Stats, opts: Options2) =>

const flushFilesPure = (stats: Stats, isWebpack: boolean, opts: Options2) => {
const files = opts.chunkNames
? filesFromChunks(opts.chunkNames, stats)
? assetsFromChunkGroups(opts.chunkNames, stats)
: flush(opts.moduleIds || [], stats, opts.rootDir, isWebpack)

const filter = opts.filter
Expand Down Expand Up @@ -200,16 +201,16 @@ const concatFilesAtKeys = (
[]
)

const filesByChunkName = (name, namedChunkGroups) => {
const chunksForChunkGroupName = (name, namedChunkGroups) => {
if (!namedChunkGroups || !namedChunkGroups[name]) {
return [name]
}

return namedChunkGroups[name].chunks
}

const hasChunk = (entry, assets, checkChunkNames) => {
const result = !!(assets[entry] || assets[`${entry}-`])
const hasChunkGroup = (entry, namedChunkGroups, checkChunkNames) => {
const result = !!namedChunkGroups[entry]
if (!result && checkChunkNames) {
console.warn(
`[FLUSH CHUNKS]: Unable to find ${entry} in Webpack chunks. Please check usage of Babel plugin.`
Expand All @@ -219,7 +220,7 @@ const hasChunk = (entry, assets, checkChunkNames) => {
return result
}

const chunksToResolve = ({
const chunkNamesForChunkGroupNames = ({
chunkNames,
stats,
checkChunkNames
Expand All @@ -230,16 +231,17 @@ const chunksToResolve = ({
}): Array<string> =>
chunkNames
.reduce((names, name) => {
if (!hasChunk(name, stats.assetsByChunkName, checkChunkNames)) {
if (!hasChunkGroup(name, stats.namedChunkGroups, checkChunkNames)) {
return names
}
const files = filesByChunkName(name, stats.namedChunkGroups)
names.push(...files)
names = names.concat(
chunksForChunkGroupName(name, stats.namedChunkGroups)
)
return names
}, [])
.filter(isUnique)

const filesFromChunks = (
const assetsFromChunkGroups = (
chunkNames: Files,
stats: Object,
checkChunkNames?: boolean
Expand All @@ -255,7 +257,7 @@ const filesFromChunks = (
)
}

const chunksWithAssets = chunksToResolve({
const chunksWithAssets = chunkNamesForChunkGroupNames({
chunkNames,
stats,
checkChunkNames
Expand All @@ -278,5 +280,5 @@ export {
isUnique,
normalizePath,
concatFilesAtKeys,
filesFromChunks
assetsFromChunkGroups
}