'use strict' process.env.BABEL_ENV = 'main' const path = require('path') const { dependencies } = require('../package.json') const webpack = require('webpack') const CopyWebpackPlugin = require('copy-webpack-plugin') const MinifyPlugin = require('babel-minify-webpack-plugin') let mainConfig = { entry: { main: path.join(__dirname, '../src/main/index.ts') }, externals: [ ...Object.keys(dependencies || {}) ], module: { rules: [ { test: /\.(js|ts)$/, enforce: 'pre', exclude: /node_modules/, use: { loader: 'eslint-loader', options: { formatter: require('eslint-friendly-formatter') } } }, { test: /\.ts$/, exclude: /node_modules/, loader: 'ts-loader' }, { test: /\.js$/, use: 'babel-loader', exclude: /node_modules/ }, { test: /\.node$/, use: 'node-loader' } ] }, node: { __dirname: process.env.NODE_ENV !== 'production', __filename: process.env.NODE_ENV !== 'production' }, output: { filename: '[name].js', libraryTarget: 'commonjs2', path: path.join(__dirname, '../dist/electron') }, plugins: [ new webpack.NoEmitOnErrorsPlugin(), new CopyWebpackPlugin([ { from: path.join(__dirname, '../src/config/locales'), to: path.join(__dirname, '../dist/electron/locales'), ignore: ['.*', '*~'] } ]) ], resolve: { alias: { // Same as tsconfig.json '@': path.join(__dirname, '../src/renderer'), '~': path.join(__dirname, '../') }, extensions: ['.js', '.json', '.node', '.ts'] }, target: 'electron-main' } /** * Adjust mainConfig for development settings */ if (process.env.NODE_ENV !== 'production') { mainConfig.plugins.push( new webpack.DefinePlugin({ '__static': `"${path.join(__dirname, '../static').replace(/\\/g, '\\\\')}"` }) ) } /** * Adjust mainConfig for production settings */ if (process.env.NODE_ENV === 'production') { mainConfig.plugins.push( new MinifyPlugin(), new webpack.DefinePlugin({ 'process.env.NODE_ENV': '"production"' }) ) } module.exports = mainConfig