From 4993aaf41e132dd0805bf6c487901d9f2aecfcfe Mon Sep 17 00:00:00 2001 From: Arpit Chakladar <54011232+arpitchakladar@users.noreply.github.com> Date: Wed, 8 Feb 2023 13:54:04 +0530 Subject: Combining similar scripts into 1 for improved performence and less files in build. --- .../webpack/utils/generate-script-build-config.js | 37 +++++++++++++++------- 1 file changed, 25 insertions(+), 12 deletions(-) (limited to 'config/webpack/utils') diff --git a/config/webpack/utils/generate-script-build-config.js b/config/webpack/utils/generate-script-build-config.js index 2485e85..f8e1697 100644 --- a/config/webpack/utils/generate-script-build-config.js +++ b/config/webpack/utils/generate-script-build-config.js @@ -1,26 +1,31 @@ const fs = require("fs"); const path = require("path"); +const SanitizeScriptsImportPlugin = require("../plugins/sanitize-scripts-import-webpack-plugin"); const InjectScriptPlugin = require("../plugins/inject-script-webpack-plugin"); const manifest = require(path.resolve(process.env.SOURCE_DIR, "manifest.json")); let count = 0; -const generateScriptBuildConfig = (scriptName, scriptType) => { - let entry = path.resolve(process.env.SOURCE_DIR, `scripts/${scriptName}.ts`); - if (!fs.existsSync(entry)) { - entry = path.resolve(process.env.SOURCE_DIR, `scripts/${scriptName}/index.ts`); - if (!fs.existsSync(entry)) { - entry = path.resolve(process.env.SOURCE_DIR, `scripts/${scriptName}.js`); - } - } +const getImportStatementForScript = script => { + const importPath = path.resolve(process.env.SOURCE_DIR, "scripts", script); + return `import "${importPath}";`; +}; + +const getVirtualEntry = scriptType => { + const string = Object.keys(manifest[scriptType]).map(getImportStatementForScript).join("\n"); + const base64 = Buffer.from(string).toString("base64"); + return `data:text/javascript;base64,${base64}`; +} + +const generateScriptBuildConfig = scriptType => { return { - entry, + entry: getVirtualEntry(scriptType), mode: "production", output: { - filename: `${scriptName}.js` + filename: `${scriptType}.js` }, resolve: { extensions: ["", ".ts", ".js"], @@ -36,15 +41,23 @@ const generateScriptBuildConfig = (scriptName, scriptType) => { options: { configFile: "config/tsconfig.json" } + }, + { + test: new RegExp(`^${path.resolve(process.env.SOURCE_DIR, "scripts")}`), + loader: path.resolve(process.env.CONFIG_DIR, "webpack/loaders/scoped-loader") } ] }, - plugins: scriptType.startsWith("injected") + plugins: [ + new SanitizeScriptsImportPlugin() + ].concat( + scriptType.startsWith("injected") ? [new InjectScriptPlugin({ onload: scriptType === "injected_and_loaded", isFirst: count++ <= 0 })] - : undefined + : [] + ) }; }; -- cgit v1.2.3