diff options
| author | Arpit Chakladar <54011232+arpitchakladar@users.noreply.github.com> | 2023-02-09 13:50:24 +0530 |
|---|---|---|
| committer | Arpit Chakladar <54011232+arpitchakladar@users.noreply.github.com> | 2023-02-09 13:50:24 +0530 |
| commit | 0404234c26f6813025e9eedd9981e1536db28b2a (patch) | |
| tree | 204e2ca55540e594e4d88eba87191b90794ddaf8 /config/webpack.config.js | |
| parent | 915947e3e7ab7c1fa07596ab4b13bf6e1cc50b76 (diff) | |
| download | banglar-bhumi-utils-0404234c26f6813025e9eedd9981e1536db28b2a.tar.gz banglar-bhumi-utils-0404234c26f6813025e9eedd9981e1536db28b2a.zip | |
Combined the scripts with the same runtime into a single file to improve performance
Diffstat (limited to 'config/webpack.config.js')
| -rw-r--r-- | config/webpack.config.js | 65 |
1 files changed, 60 insertions, 5 deletions
diff --git a/config/webpack.config.js b/config/webpack.config.js index 3f09a5a..b4cd6cd 100644 --- a/config/webpack.config.js +++ b/config/webpack.config.js @@ -5,16 +5,71 @@ process.env.ROOT_DIR = path.resolve(__dirname, ".."); process.env.CONFIG_DIR = path.resolve(process.env.ROOT_DIR, "config"); process.env.SOURCE_DIR = path.resolve(process.env.ROOT_DIR, "src"); -const CreateManifestPlugin = require("./webpack/plugins/create-manifest-webpack-plugin"); -const generateScriptBuildConfig = require("./webpack/utils/generate-script-build-config"); -const inlineJavascript = require("./webpack/utils/inline-javascript"); +const CreateManifestPlugin = require(path.resolve(process.env.CONFIG_DIR, "webpack/plugins/create-manifest-webpack-plugin")); +const SanitizeScriptsImportPlugin = require(path.resolve(process.env.CONFIG_DIR, "webpack/plugins/sanitize-scripts-import-webpack-plugin")); +const InjectScriptPlugin = require(path.resolve(process.env.CONFIG_DIR, "webpack/plugins/inject-script-webpack-plugin")); +const { inlineJavascript } = require(path.resolve(process.env.CONFIG_DIR, "webpack/utils/inline-javascript")); +const { getScriptRuntimeFromType } = require(path.resolve(process.env.CONFIG_DIR, "webpack/utils/script-runtime")); const scripts = require(path.resolve(process.env.SOURCE_DIR, "scripts.json")); let scriptBuildConfigs = []; -for (const scriptType in scripts) { - scriptBuildConfigs.push(generateScriptBuildConfig(scriptType)); +let injectedScriptsCount = 0; + +const allScripts = { + document_start: { + ...(scripts.before || {}), + ...(scripts.injected || {}), + ...(scripts.injected_and_loaded || {}) + }, + document_end: scripts.rendered, + document_idle: scripts.loaded +}; + +for (const scriptRuntime in allScripts) { + if (allScripts[scriptRuntime]) { + const importStatements = Object.keys(allScripts[scriptRuntime]).map(script => + `import "${path.resolve(process.env.SOURCE_DIR, "scripts", script)}";` + ).join("\n"); + + scriptBuildConfigs.push({ + entry: inlineJavascript(importStatements), + name: scriptRuntime, + mode: "production", + output: { + filename: `${scriptRuntime}.js` + }, + resolve: { + extensions: ["", ".ts", ".js"], + alias: { + "@": process.env.SOURCE_DIR + } + }, + module: { + rules: [ + { + test: /\.tsx?$/, + loader: "ts-loader", + 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: [ + new SanitizeScriptsImportPlugin() + ].concat( + scriptRuntime === "document_start" + ? [new InjectScriptPlugin()] + : [] + ) + }); + } } scriptBuildConfigs.push({ |
