From 7455c1e81dd18a898004c398a16e9f0b6f7c19ae Mon Sep 17 00:00:00 2001 From: Arpit Chakladar <54011232+arpitchakladar@users.noreply.github.com> Date: Tue, 4 Apr 2023 16:05:48 +0530 Subject: Keeping track of the number of times that a shared module has been used and dertermining if it is to be included along with the other scripts. --- config/webpack/loader/count-imports-loader.js | 18 ++++++++++++++++++ .../plugins/create-manifest-webpack-plugin/index.js | 20 ++++++++++++-------- config/webpack/utils/shared-modules.js | 4 +--- 3 files changed, 31 insertions(+), 11 deletions(-) create mode 100644 config/webpack/loader/count-imports-loader.js (limited to 'config/webpack') diff --git a/config/webpack/loader/count-imports-loader.js b/config/webpack/loader/count-imports-loader.js new file mode 100644 index 0000000..4c3faa4 --- /dev/null +++ b/config/webpack/loader/count-imports-loader.js @@ -0,0 +1,18 @@ +const { ImportManager } = require("import-manager"); + +const sharedModules = webpackRequire("utils/shared-modules.js"); + +module.exports = function(source) { + const { sharedModulesImportedCount } = this.getOptions(); + const manager = new ImportManager(source); + + for (const unit of manager.imports.es6.units) { + const moduleIndex = sharedModules.indexOf(unit.module.name); + + if (moduleIndex >= 0) { + sharedModulesImportedCount[sharedModules[moduleIndex]]++; + } + } + + return source; +}; diff --git a/config/webpack/plugins/create-manifest-webpack-plugin/index.js b/config/webpack/plugins/create-manifest-webpack-plugin/index.js index a2040da..103fb3c 100644 --- a/config/webpack/plugins/create-manifest-webpack-plugin/index.js +++ b/config/webpack/plugins/create-manifest-webpack-plugin/index.js @@ -8,6 +8,10 @@ const sharedModules = webpackRequire("utils/shared-modules"); const manifest = webpackRequire("plugins/create-manifest-webpack-plugin/manifest-template.json"); class CreateManifestPlugin { + constructor({ sharedModulesImportedCount }) { + this.sharedModulesImportedCount = sharedModulesImportedCount; + } + apply(compiler) { compiler.hooks.compilation.tap("CreateManifestPlugin", compilation => { compilation.hooks.processAssets.tap( @@ -20,6 +24,14 @@ class CreateManifestPlugin { manifest.version = require(path.resolve(ROOT_DIR, "package.json")).version; manifest.content_scripts = []; + manifest.content_scripts.push({ + matches: [`*://banglarbhumi.gov.in/BanglarBhumi/*`], + js: sharedModules + .filter(sharedModule => this.sharedModulesImportedCount[sharedModule] > 0) + .map(sharedModule => `shared/${getFileNameHash(sharedModule, "shared")}.js`), + run_at: "document_start" + }); + for (const scriptPath in scripts) { for (const scriptType in scripts[scriptPath]) { const matches = [`*://banglarbhumi.gov.in/BanglarBhumi/${scriptPath}`]; @@ -35,14 +47,6 @@ class CreateManifestPlugin { } } - for (const sharedModule of sharedModules) { - manifest.content_scripts.push({ - matches: [`*://banglarbhumi.gov.in/BanglarBhumi/*`], - js: [`shared/${getFileNameHash(sharedModule, "shared")}.js`], - run_at: "document_start" - }); - } - const resources = []; for (const assetName in assets) { diff --git a/config/webpack/utils/shared-modules.js b/config/webpack/utils/shared-modules.js index 974145f..1584f0f 100644 --- a/config/webpack/utils/shared-modules.js +++ b/config/webpack/utils/shared-modules.js @@ -1,8 +1,6 @@ const path = require("path"); const fs = require("fs"); -const sharedModules = fs.readdirSync(path.resolve(SOURCE_DIR, "shared")) +module.exports = fs.readdirSync(path.resolve(SOURCE_DIR, "shared")) .filter(sharedModule => !sharedModule.endsWith("import-shared.js")) .map(sharedModule => sharedModule.substring(0, sharedModule.length - 3)); - -module.exports = sharedModules; -- cgit v1.2.3