const { join, resolve } = require('path') const HtmlWebpackPlugin = require('html-webpack-plugin') const MiniCssExtractPlugin = require('mini-css-extract-plugin') const CopyWebpackPlugin = require('copy-webpack-plugin') const mode = process.env.NODE_ENV?.trim() || 'development' const isDev = mode === 'development' module.exports = [ { devtool: isDev ? 'eval' : 'source-map', entry: join(__dirname, 'src', 'background', 'background.js'), output: { path: join(__dirname, 'build'), filename: 'background.js' }, mode, externals: { 'utp-native': 'require("utp-native")' }, resolve: { aliasFields: [], mainFields: ['module', 'main', 'node'], alias: { 'node-fetch': false } }, plugins: [new HtmlWebpackPlugin({ filename: 'background.html' })], target: 'electron20.0-renderer', devServer: { devMiddleware: { writeToDisk: true }, hot: true, client: { overlay: { errors: true, warnings: false, runtimeErrors: false } }, port: 5000 } }, { devtool: isDev ? 'eval' : 'source-map', entry: join(__dirname, 'src', 'renderer', 'main.js'), output: { path: join(__dirname, 'build'), filename: 'renderer.js' }, mode, module: { rules: [ { test: /\.svelte$/, use: { loader: 'svelte-loader', options: { compilerOptions: { dev: isDev }, emitCss: !isDev, hotReload: isDev } } }, { test: /\.css$/, use: [ MiniCssExtractPlugin.loader, 'css-loader' ] }, { // required to prevent errors from Svelte on Webpack 5+ test: /node_modules\/svelte\/.*\.mjs$/, resolve: { fullySpecified: false } } ] }, resolve: { aliasFields: [], alias: { '@': resolve('src/renderer'), module: false, url: false }, extensions: ['.mjs', '.js', '.svelte'] }, plugins: [ new MiniCssExtractPlugin({ filename: '[name].css' }), new CopyWebpackPlugin({ patterns: [ { from: 'src/renderer/public' } ] }), new HtmlWebpackPlugin({ filename: 'index.html', inject: false, templateContent: ({ htmlWebpackPlugin }) => /* html */` Miru ${htmlWebpackPlugin.tags.headTags} ${htmlWebpackPlugin.tags.bodyTags} ` })], target: 'web' }, { devtool: isDev ? 'eval' : 'source-map', entry: join(__dirname, 'src', 'preload', 'preload.js'), output: { path: join(__dirname, 'build'), filename: 'preload.js' }, resolve: { aliasFields: [] }, mode, target: 'electron20.0-preload' }, { devtool: isDev ? 'eval' : 'source-map', entry: join(__dirname, 'src', 'main', 'main.js'), output: { path: join(__dirname, 'build'), filename: 'main.js' }, resolve: { aliasFields: [] }, mode, target: 'electron20.0-main' } ]