From 6926e190c80f525467980fffbbded0bf933f27ed Mon Sep 17 00:00:00 2001 From: Jason Chen Date: Sun, 24 Jan 2021 16:15:48 +0800 Subject: [PATCH] fix: ignore css chunk (#689) --- packages/server/src/ChunkExtractor.js | 23 ++++++++++++++++++++++- packages/webpack-plugin/src/index.js | 9 ++++++++- 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/packages/server/src/ChunkExtractor.js b/packages/server/src/ChunkExtractor.js index 6b3bc0f6..0740ef52 100644 --- a/packages/server/src/ChunkExtractor.js +++ b/packages/server/src/ChunkExtractor.js @@ -171,6 +171,11 @@ function isValidChunkAsset(chunkAsset) { return chunkAsset.scriptType && !HOT_UPDATE_REGEXP.test(chunkAsset.filename) } +const JS_FILE = /\.js$/ +function checkIfChunkIncludesJs(chunkInfo) { + return chunkInfo.files.some(file => JS_FILE.test(file.split('?')[0])) +} + class ChunkExtractor { constructor({ statsFile, @@ -201,6 +206,12 @@ class ChunkExtractor { return chunkGroup } + getChunkInfo(chunkId) { + const chunkInfo = this.stats.chunks.find(chunk => chunk.id === chunkId) + invariant(chunkInfo, `cannot find chunk (chunkId: ${chunkId}) in stats`) + return chunkInfo + } + createChunkAsset({ filename, chunk, type, linkType }) { const resolvedFilename = typeof filename === 'object' && filename.name ? filename.name : filename @@ -269,7 +280,17 @@ class ChunkExtractor { getChunkDependencies(chunks) { const one = chunk => { const chunkGroup = this.getChunkGroup(chunk) - return chunkGroup.chunks + + // ignore chunk that only contains css files. + return chunkGroup.chunks.filter(chunkId => { + const chunkInfo = this.getChunkInfo(chunkId) + + if (!chunkInfo) { + return false + } + + return checkIfChunkIncludesJs(chunkInfo) + }) } if (Array.isArray(chunks)) { diff --git a/packages/webpack-plugin/src/index.js b/packages/webpack-plugin/src/index.js index eab9a28e..291a5120 100644 --- a/packages/webpack-plugin/src/index.js +++ b/packages/webpack-plugin/src/index.js @@ -22,12 +22,19 @@ class LoadablePlugin { hash: true, publicPath: true, assets: true, - chunks: false, + chunks: true, modules: false, source: false, errorDetails: false, timings: false, }) + + stats.chunks = stats.chunks.map(chunk => ({ + ...chunk, + modules: [], // in case modules array is big + origins: [], // in case origins array is big + })) + const result = JSON.stringify(stats, null, 2) if (this.opts.writeToDisk) {