diff options
Diffstat (limited to 'config/webpack.config.js')
| -rw-r--r-- | config/webpack.config.js | 71 |
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; |
