blob: beb3a2372654c8a07c38b0d1f7d35e8b26ea6610 [file] [log] [blame]
Adrien Béraud824a7132021-04-17 17:25:27 -04001'use strict'
Adrien Béraude74741b2021-04-19 13:22:54 -04002
Adrien Béraude74741b2021-04-19 13:22:54 -04003import { fileURLToPath } from 'url';
4import { dirname } from 'path';
5const __filename = fileURLToPath(import.meta.url);
6const __dirname = dirname(__filename);
Adrien Béraud4e287b92021-04-24 16:15:56 -04007
8import dotenv from 'dotenv'
Adrien Béraud4e287b92021-04-24 16:15:56 -04009dotenv.config({ path: resolve(__dirname, '..', '.env') })
10
11import { resolve } from 'path'
12import HtmlWebpackPlugin from 'html-webpack-plugin'
13import CopyWebpackPlugin from 'copy-webpack-plugin'
Adrien Béraud824a7132021-04-17 17:25:27 -040014const mode = process.env.NODE_ENV || 'development'
15
Adrien Béraude74741b2021-04-19 13:22:54 -040016let entry = [resolve(__dirname, 'src', 'index.js')]
Adrien Béraud150b4782021-04-21 19:40:59 -040017let plugins = [
Adrien Béraude5cad982021-06-07 10:05:50 -040018 new HtmlWebpackPlugin({ template: '!!raw-loader!' + resolve(__dirname, 'src', 'index.ejs'), filename: 'index.ejs' }),
Adrien Béraud88a52442021-04-26 12:11:41 -040019 new CopyWebpackPlugin({
20 patterns: [{ from: resolve(__dirname, 'public'), to: resolve(__dirname, 'dist') }]
21 })
Adrien Béraud150b4782021-04-21 19:40:59 -040022]
Adrien Béraud824a7132021-04-17 17:25:27 -040023let devtool = undefined
Adrien Béraude74741b2021-04-19 13:22:54 -040024let babelLoaderPlugins = ["@babel/plugin-transform-runtime"]
Adrien Béraud824a7132021-04-17 17:25:27 -040025
26if (mode === 'development') {
Adrien Béraud88a52442021-04-26 12:11:41 -040027 const webpack = (await import('webpack')).default
28 const ReactRefreshWebpackPlugin = (await import('@pmmmwh/react-refresh-webpack-plugin')).default
29 entry = ['webpack-hot-middleware/client', ...entry]
30 plugins = [new webpack.HotModuleReplacementPlugin(), new ReactRefreshWebpackPlugin(), ...plugins]
31 babelLoaderPlugins = [...babelLoaderPlugins, "react-refresh/babel"]
32 devtool = 'inline-source-map'
Adrien Béraud824a7132021-04-17 17:25:27 -040033}
34console.log(`Webpack configured for ${mode}`)
Adrien Béraudc4dd44a2021-04-08 01:05:24 -040035
Adrien Béraude74741b2021-04-19 13:22:54 -040036export default {
Adrien Béraud88a52442021-04-26 12:11:41 -040037 entry,
38 output: {
39 path: resolve(__dirname, 'dist'),
40 filename: 'bundle.js',
41 publicPath: '/'
42 },
43 devtool,
44 mode,
45 module: {
46 rules: [
47 {
48 test: /\.jsx?/,
49 resolve: {
50 fullySpecified: false
51 },
52 exclude: /node_modules/,
53 use: {
54 loader: 'babel-loader',
55 options: {
56 plugins: babelLoaderPlugins,
57 presets: [
58 ['@babel/preset-env', {
59 useBuiltIns: 'entry',
60 corejs: { version: '3.10', proposals: true },
61 }],
62 ['@babel/preset-react', {
63 runtime: 'automatic'
64 }]]
65 }
66 }
67 },
68 {
69 test: /\.s[ac]ss$/i,
70 use: ['style-loader', 'css-loader', 'sass-loader'],
71 },
72 {
73 test: /\.svg$/,
74 type: 'asset',
75 use: 'svgo-loader'
76 }
77 ]
78 },
79 plugins
Adrien Béraudc4dd44a2021-04-08 01:05:24 -040080}