diff options
| author | Arpit Chakladar <54011232+arpitchakladar@users.noreply.github.com> | 2023-02-08 13:54:04 +0530 |
|---|---|---|
| committer | Arpit Chakladar <54011232+arpitchakladar@users.noreply.github.com> | 2023-02-08 13:54:04 +0530 |
| commit | 4993aaf41e132dd0805bf6c487901d9f2aecfcfe (patch) | |
| tree | a51ebf7bff551e9188d68f777d100e8ffb70922d /config/webpack/utils | |
| parent | 8234acb45cd99fc7bcd99df7f71cac02845bb534 (diff) | |
| download | banglar-bhumi-utils-4993aaf41e132dd0805bf6c487901d9f2aecfcfe.tar.gz banglar-bhumi-utils-4993aaf41e132dd0805bf6c487901d9f2aecfcfe.zip | |
Combining similar scripts into 1 for improved performence and less files in build.
Diffstat (limited to 'config/webpack/utils')
| -rw-r--r-- | config/webpack/utils/generate-script-build-config.js | 37 |
1 files changed, 25 insertions, 12 deletions
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 + : [] + ) }; }; |
