webpack.main.config.js 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. const webpack = require('webpack')
  2. const { merge } = require('webpack-merge')
  3. const TsconfigPathsPlugin = require('tsconfig-paths-webpack-plugin')
  4. const CopyPlugin = require('copy-webpack-plugin')
  5. const nodeExternals = require('webpack-node-externals')
  6. const baseConfig = require('./webpack.base.config')
  7. module.exports = merge(baseConfig, {
  8. target: 'electron-main',
  9. entry: {
  10. main: './src/main/main.ts',
  11. preload: './src/main/preload.ts',
  12. },
  13. resolve: {
  14. plugins: [new TsconfigPathsPlugin({})],
  15. },
  16. externals: [nodeExternals()],
  17. module: {
  18. rules: [
  19. {
  20. test: /\.ts$/,
  21. exclude: /node_modules/,
  22. loader: 'babel-loader',
  23. options: {
  24. cacheDirectory: true,
  25. babelrc: false,
  26. presets: [
  27. ['@babel/preset-env', { targets: 'maintained node versions' }],
  28. '@babel/preset-typescript',
  29. ],
  30. plugins: [
  31. ['@babel/plugin-proposal-decorators', { legacy: true }],
  32. ['@babel/plugin-proposal-class-properties', { loose: true }],
  33. ['@babel/plugin-proposal-private-methods', { loose: true }],
  34. [
  35. '@babel/plugin-proposal-private-property-in-object',
  36. { loose: true },
  37. ],
  38. ],
  39. },
  40. },
  41. ],
  42. },
  43. plugins: [
  44. new webpack.DefinePlugin({
  45. 'process.env.NODE_ENV': JSON.stringify(
  46. process.env.NODE_ENV || 'development',
  47. ),
  48. }),
  49. new CopyPlugin({
  50. patterns: [{ from: 'src/assets', to: 'assets' }],
  51. }),
  52. ],
  53. })