From 068a14ffa464d6cb0ccc5c3cec11d10d8cceae90 Mon Sep 17 00:00:00 2001 From: Arpit Chakladar <54011232+arpitchakladar@users.noreply.github.com> Date: Sun, 26 Mar 2023 22:39:07 +0530 Subject: Sharing code between scripts for reduced bundle size. --- .../plugins/create-manifest-webpack-plugin/index.js | 12 ++++++++---- config/webpack/utils/format-scripts.js | 15 --------------- config/webpack/utils/get-injection-code.js | 12 ++---------- config/webpack/utils/scripts.js | 16 ++++++++++++++++ config/webpack/utils/shared-modules.js | 8 ++++++++ 5 files changed, 34 insertions(+), 29 deletions(-) delete mode 100644 config/webpack/utils/format-scripts.js create mode 100644 config/webpack/utils/scripts.js create mode 100644 config/webpack/utils/shared-modules.js (limited to 'config/webpack') diff --git a/config/webpack/plugins/create-manifest-webpack-plugin/index.js b/config/webpack/plugins/create-manifest-webpack-plugin/index.js index 1940c6e..77f5959 100644 --- a/config/webpack/plugins/create-manifest-webpack-plugin/index.js +++ b/config/webpack/plugins/create-manifest-webpack-plugin/index.js @@ -3,7 +3,9 @@ const path = require("path"); const { getScriptRuntimeFromType } = webpackRequire("utils/script-runtime"); const { getFileNameHash } = webpackRequire("utils/file-name-hash"); -const { formatScripts } = webpackRequire("utils/format-scripts"); +const scripts = webpackRequire("utils/scripts"); +const sharedModules = webpackRequire("utils/shared-modules"); +const manifest = webpackRequire("plugins/create-manifest-webpack-plugin/manifest-template.json"); class CreateManifestPlugin { apply(compiler) { @@ -15,8 +17,6 @@ class CreateManifestPlugin { additionalAssets: true }, assets => { - const scripts = formatScripts(require(path.resolve(SOURCE_DIR, "scripts.json"))); - const manifest = webpackRequire("plugins/create-manifest-webpack-plugin/manifest-template.json"); manifest.version = require(path.resolve(ROOT_DIR, "package.json")).version; manifest.content_scripts = []; @@ -37,9 +37,13 @@ class CreateManifestPlugin { const resources = []; - for (const assetName in assets) + for (const assetName in assets) { if (/^assets\/.*\.(jpg|png|gif)$/.test(assetName)) resources.push(assetName); + } + + for (const sharedModule of sharedModules) + resources.push(`shared/${sharedModule}.js`); if (resources.length > 0) { manifest.web_accessible_resources = [ diff --git a/config/webpack/utils/format-scripts.js b/config/webpack/utils/format-scripts.js deleted file mode 100644 index 0961674..0000000 --- a/config/webpack/utils/format-scripts.js +++ /dev/null @@ -1,15 +0,0 @@ -module.exports.formatScripts = scripts => { - const _scripts = {}; - - for (const scriptType in scripts) { - const currentScripts = scripts[scriptType]; - for (const scriptName in currentScripts) { - const scriptPath = currentScripts[scriptName]; - _scripts[scriptPath] = _scripts[scriptPath] || {}; - _scripts[scriptPath][scriptType] = _scripts[scriptPath][scriptType] || []; - _scripts[scriptPath][scriptType].push(scriptName); - } - } - - return _scripts; -}; diff --git a/config/webpack/utils/get-injection-code.js b/config/webpack/utils/get-injection-code.js index 51d1c20..6333a6a 100644 --- a/config/webpack/utils/get-injection-code.js +++ b/config/webpack/utils/get-injection-code.js @@ -1,18 +1,10 @@ module.exports.getInjectionCode = (code, front) => { - const escapeSequences = [ - ["\b", "\\b"], - ["\f", "\\f"], - ["\n", "\\n"], - ["\r", "\\r"], - ["\t", "\\t"], - ["\v", "\\v"] - ]; + const escapeSequences = ["b", "f", "n", "r", "t", "v"]; let finalCode = code.replaceAll("`","\\`"); for (const escapeSequence of escapeSequences) { finalCode = finalCode - .replaceAll(escapeSequence[1], "\\" + escapeSequence[1]) - .replaceAll(escapeSequence[0], escapeSequence[1]); + .replaceAll("\\" + escapeSequence, "\\\\" + escapeSequence) } const concatenationCode = front diff --git a/config/webpack/utils/scripts.js b/config/webpack/utils/scripts.js new file mode 100644 index 0000000..2196737 --- /dev/null +++ b/config/webpack/utils/scripts.js @@ -0,0 +1,16 @@ +const path = require("path"); +const scripts = require(path.resolve(SOURCE_DIR, "scripts.json")); + +const formattedScripts = {}; + +for (const scriptType in scripts) { + const currentScripts = scripts[scriptType]; + for (const scriptName in currentScripts) { + const scriptPath = currentScripts[scriptName]; + formattedScripts[scriptPath] = formattedScripts[scriptPath] || {}; + formattedScripts[scriptPath][scriptType] = formattedScripts[scriptPath][scriptType] || []; + formattedScripts[scriptPath][scriptType].push(scriptName); + } +} + +module.exports = formattedScripts; diff --git a/config/webpack/utils/shared-modules.js b/config/webpack/utils/shared-modules.js new file mode 100644 index 0000000..f10d4a1 --- /dev/null +++ b/config/webpack/utils/shared-modules.js @@ -0,0 +1,8 @@ +const path = require("path"); +const fs = require("fs"); + +const sharedModules = fs.readdirSync(path.resolve(SOURCE_DIR, "shared")) + .filter(sharedModule => !sharedModule.endsWith("import-shared.js")) + .map(sharedModule => sharedModule.substring(0, sharedModule.length - 3));4 + +module.exports = sharedModules; -- cgit v1.2.3