aboutsummaryrefslogtreecommitdiffstats
path: root/config/webpack.config.js
diff options
context:
space:
mode:
Diffstat (limited to 'config/webpack.config.js')
-rw-r--r--config/webpack.config.js71
1 files changed, 71 insertions, 0 deletions
diff --git a/config/webpack.config.js b/config/webpack.config.js
new file mode 100644
index 0000000..1796aa8
--- /dev/null
+++ b/config/webpack.config.js
@@ -0,0 +1,71 @@
+const fs = require("fs");
+const path = require("path");
+const CopyPlugin = require("copy-webpack-plugin");
+
+process.env.ROOT_DIR = path.resolve(__dirname, "..");
+process.env.SOURCE_DIR = path.resolve(process.env.ROOT_DIR, "src");
+process.env.STATIC_DIR = path.resolve(process.env.ROOT_DIR, "static");
+
+const InjectScriptPlugin = require("./webpack/plugins/inject-script-webpack-plugin");
+const CreateManifestPlugin = require("./webpack/plugins/create-manifest-webpack-plugin");
+
+const manifest = require(path.resolve(process.env.SOURCE_DIR, "manifest.json"));
+
+const generateScriptBuildConfig = (script, scriptType) => {
+ const scriptName = script.substring(0, script.length - 3);
+ 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`);
+ }
+ }
+
+ return {
+ entry,
+ mode: "production",
+ output: {
+ filename: `${scriptName}.js`
+ },
+ resolve: {
+ extensions: ["", ".ts", ".js"],
+ alias: {
+ "@": process.env.SOURCE_DIR
+ }
+ },
+ module: {
+ rules: [
+ {
+ test: /\.tsx?$/,
+ loader: "ts-loader",
+ options: {
+ configFile: "config/tsconfig.json"
+ }
+ }
+ ]
+ },
+ plugins: scriptType.startsWith("injected")
+ ? [new InjectScriptPlugin({ onload: scriptType === "injected_and_loaded" })]
+ : undefined
+ };
+};
+
+let scripts = [];
+
+for (const scriptType in manifest) {
+ for (const scriptName in manifest[scriptType]) {
+ scripts.push(generateScriptBuildConfig(scriptName, scriptType));
+ }
+}
+
+scripts[scripts.length - 1].plugins = (scripts[scripts.length - 1].plugins || []).concat([
+ new CopyPlugin({
+ patterns: [{
+ from: process.env.STATIC_DIR,
+ to: "./"
+ }]
+ }),
+ new CreateManifestPlugin(manifest)
+]);
+
+module.exports = scripts;