From 3789b8962d278db515ecc596971643b71178250e Mon Sep 17 00:00:00 2001 From: Aliaksei Ladyha Date: Tue, 5 Nov 2019 11:07:02 +0300 Subject: [PATCH] add option to skip dynamic chunks --- README.md | 5 ++++- source/chunks plugin.js | 21 ++++++++++++++++++--- source/client configuration.js | 8 ++++++-- 3 files changed, 28 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 06561f2..e76aff8 100755 --- a/README.md +++ b/README.md @@ -296,7 +296,10 @@ const configuration = clientConfiguration(baseConfiguration, settings, { silent: true, // By default, chunk_info_filename is `webpack-chunks.json` - chunk_info_filename: 'submodule-webpack-chunks.json' + chunk_info_filename: 'submodule-webpack-chunks.json', + + // Will not inlcude chunks that are not required for initial page load. ( dynamicly imported, etc. ) + skipDynamicChunks: false } ``` diff --git a/source/chunks plugin.js b/source/chunks plugin.js index dd6fced..87ac00c 100644 --- a/source/chunks plugin.js +++ b/source/chunks plugin.js @@ -25,7 +25,7 @@ ChunkFileNamesPlugin.prototype.apply = function(compiler) // Generates chunk filename info // (`assets_base_url` will be prepended to chunk file names) -function filename_info(json, assets_base_url) +function filename_info(json, assets_base_url, options) { const assets_by_chunk = json.assetsByChunkName @@ -53,8 +53,23 @@ function filename_info(json, assets_base_url) .map(name => assets_base_url + name) } + // leave only initial ( non dynamic ) chunks + function filterNonInitialChunks(chunkName) { + const chunkObj = json.chunks.find(chunkObj => chunkObj.names && chunkObj.names[0] === chunkName); + return chunkObj && chunkObj.initial; + } + + function hasInitialChunks() { + return !!(json.chunks && json.chunks.length && json.chunks.find(chunkObj => chunkObj.initial)); + } + + let chunkNames = Object.keys(assets_by_chunk); + if (hasInitialChunks() && options.skipDynamicChunks) { + chunkNames = chunkNames.filter(filterNonInitialChunks); + } + // for each chunk name ("main", "common", ...) - Object.keys(assets_by_chunk).forEach(function(name) + chunkNames.forEach(function(name) { // log.debug(`getting javascript and styles for chunk "${name}"`) @@ -118,5 +133,5 @@ function writeChunkFileNames(stats, options, webpack_configuration) const output_file_path = chunk_info_file_path(webpack_configuration, options.chunk_info_filename) // Write chunk filename info to disk - fs.outputFileSync(output_file_path, JSON.stringify(filename_info(json, assets_base_url))) + fs.outputFileSync(output_file_path, JSON.stringify(filename_info(json, assets_base_url, options))) } diff --git a/source/client configuration.js b/source/client configuration.js index e207193..70bf26c 100644 --- a/source/client configuration.js +++ b/source/client configuration.js @@ -29,7 +29,11 @@ export default function client_configuration(webpack_configuration, settings, op // because `webpack-dev-server` seems to alter it // by changing the already predefined `.output.path`. // - new chunks_plugin(clone(configuration), { silent: settings.silent, chunk_info_filename: settings.chunk_info_filename }) + new chunks_plugin(clone(configuration), { + silent: settings.silent, + chunk_info_filename: settings.chunk_info_filename, + skipDynamicChunks: settings.skipDynamicChunks || false + }) ) // CSS bundle filename (if specified) @@ -228,4 +232,4 @@ function generate_extract_css_loaders(after_style_loader, development, extract_c } return extract_css_loaders -} \ No newline at end of file +}