aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--config/webpack.config.js105
-rw-r--r--config/webpack/plugins/create-manifest-webpack-plugin/index.js6
-rw-r--r--config/webpack/plugins/inject-script-webpack-plugin.js2
3 files changed, 48 insertions, 65 deletions
diff --git a/config/webpack.config.js b/config/webpack.config.js
index f4b05c7..fb618db 100644
--- a/config/webpack.config.js
+++ b/config/webpack.config.js
@@ -18,82 +18,63 @@ let scriptBuildConfigs = [];
let injectedScriptsCount = 0;
-const allScripts = {};
+const entries = {};
+
+const _scripts = {};
for (const scriptType in scripts) {
- const currentScripts = scripts[scriptType];
- for (const script in currentScripts) {
- allScripts[currentScripts[script]] = allScripts[currentScripts[script]] || {};
- allScripts[currentScripts[script]][getScriptRuntimeFromType(scriptType)] = [
- ...(allScripts[currentScripts[script]][getScriptRuntimeFromType(scriptType)] || []),
- script
- ]
- }
+ _scripts[getScriptRuntimeFromType(scriptType)] = {
+ ..._scripts[getScriptRuntimeFromType(scriptType)],
+ ...scripts[scriptType]
+ };
}
-for (const scriptPath in allScripts) {
- for (const scriptRuntime in allScripts[scriptPath]) {
- const scripts = allScripts[scriptPath];
- if (scripts[scriptRuntime]) {
- const importStatements = scripts[scriptRuntime].map(script =>
+for (const scriptRuntime in _scripts) {
+ const scripts = _scripts[scriptRuntime];
+ for (const script in scripts) {
+ const scriptPath = scripts[script];
+ entries[`${scriptRuntime} - "${scriptPath}"`] = {
+ import: inlineJavascript(Object.keys(scripts).map(script =>
`import "${path.resolve(process.env.SOURCE_DIR, "scripts", script)}";`
- ).join("\n");
-
- scriptBuildConfigs.push({
- entry: inlineJavascript(importStatements),
- name: `${scriptPath} - ${scriptRuntime}`,
- mode: "production",
- output: {
- filename: `scripts/${getFileNameHash(scriptPath)}/${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()]
- : []
- )
- });
- }
+ ).join("\n")),
+ filename: `scripts/${getFileNameHash(scriptPath)}/${scriptRuntime}.js`
+ };
}
}
-scriptBuildConfigs.push({
- name: "manifest",
- entry: inlineJavascript(""),
- output: {
- filename: `manifest.json`
+module.exports = {
+ entry: entries,
+ mode: "production",
+ 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(),
+ new InjectScriptPlugin(),
new CopyPlugin({
patterns: [{
from: path.resolve(process.env.ROOT_DIR, "static"),
to: "./"
}]
}),
- new CreateManifestPlugin({ scripts })
+ new CreateManifestPlugin()
]
-});
-
-module.exports = scriptBuildConfigs;
+};
diff --git a/config/webpack/plugins/create-manifest-webpack-plugin/index.js b/config/webpack/plugins/create-manifest-webpack-plugin/index.js
index fcfe689..7044be2 100644
--- a/config/webpack/plugins/create-manifest-webpack-plugin/index.js
+++ b/config/webpack/plugins/create-manifest-webpack-plugin/index.js
@@ -1,12 +1,14 @@
const { sources } = require("webpack");
const path = require("path");
+const scripts = require(path.resolve(process.env.SOURCE_DIR, "scripts.json"));
+
const { version } = require(path.resolve(process.env.ROOT_DIR, "package.json"));
const { getScriptRuntimeFromType } = require(path.resolve(process.env.CONFIG_DIR, "webpack/utils/script-runtime"));
const { getFileNameHash } = require(path.resolve(process.env.CONFIG_DIR, "webpack/utils/file-name-hash"));
class CreateManifestPlugin {
- constructor({ scripts }) {
+ constructor() {
this.scripts = {};
this.manifest = require("./manifest-template.json");
for (const scriptType in scripts) {
@@ -50,7 +52,7 @@ class CreateManifestPlugin {
}
}
- compilation.updateAsset(
+ compilation.emitAsset(
"manifest.json",
new sources.RawSource(JSON.stringify(this.manifest))
);
diff --git a/config/webpack/plugins/inject-script-webpack-plugin.js b/config/webpack/plugins/inject-script-webpack-plugin.js
index 98620ea..b6525f6 100644
--- a/config/webpack/plugins/inject-script-webpack-plugin.js
+++ b/config/webpack/plugins/inject-script-webpack-plugin.js
@@ -18,7 +18,7 @@ class InjectScriptPlugin {
},
async assets => {
for (const assetName in assets) {
- if (assetName.endsWith(".js")) {
+ if (assetName.endsWith("document_start.js")) {
const currentAssetContent = compilation.getAsset(assetName).source.source();
const scripts = {
before: "",