blob: 82caf43eccd23e1944fd019c7b943b36cd84f12d [file] [log] [blame]
Adrien Béraud824a7132021-04-17 17:25:27 -04001'use strict'
Adrien Béraude74741b2021-04-19 13:22:54 -04002
3import dotenv from 'dotenv'
4dotenv.config({ path: resolve(import.meta.url, '..', '.env') })
5
6import { resolve } from 'path'
7import HtmlWebpackPlugin from 'html-webpack-plugin'
8
9import { fileURLToPath } from 'url';
10import { dirname } from 'path';
11const __filename = fileURLToPath(import.meta.url);
12const __dirname = dirname(__filename);
Adrien Béraud824a7132021-04-17 17:25:27 -040013const mode = process.env.NODE_ENV || 'development'
14
Adrien Béraude74741b2021-04-19 13:22:54 -040015let entry = [resolve(__dirname, 'src', 'index.js')]
Adrien Béraud824a7132021-04-17 17:25:27 -040016let plugins = [new HtmlWebpackPlugin({
Adrien Béraude74741b2021-04-19 13:22:54 -040017 template: resolve(__dirname, 'src', 'index.ejs')
Adrien Béraud824a7132021-04-17 17:25:27 -040018})]
19let devtool = undefined
Adrien Béraude74741b2021-04-19 13:22:54 -040020let babelLoaderPlugins = ["@babel/plugin-transform-runtime"]
Adrien Béraud824a7132021-04-17 17:25:27 -040021
22if (mode === 'development') {
Adrien Béraude74741b2021-04-19 13:22:54 -040023 const webpack = (await import('webpack')).default
24 const ReactRefreshWebpackPlugin = (await import('@pmmmwh/react-refresh-webpack-plugin')).default
25 entry = ['webpack-hot-middleware/client', ...entry]
26 plugins = [new webpack.HotModuleReplacementPlugin(), new ReactRefreshWebpackPlugin(), ...plugins]
27 babelLoaderPlugins = [...babelLoaderPlugins, "react-refresh/babel"]
Adrien Béraud824a7132021-04-17 17:25:27 -040028 devtool = 'inline-source-map'
29}
30console.log(`Webpack configured for ${mode}`)
Adrien Béraudc4dd44a2021-04-08 01:05:24 -040031
Adrien Béraude74741b2021-04-19 13:22:54 -040032export default {
Adrien Béraud824a7132021-04-17 17:25:27 -040033 entry,
Adrien Béraudc4dd44a2021-04-08 01:05:24 -040034 output: {
Adrien Béraude74741b2021-04-19 13:22:54 -040035 path: resolve(__dirname, 'dist'),
Adrien Béraudc4dd44a2021-04-08 01:05:24 -040036 filename: 'bundle.js',
37 publicPath: '/'
38 },
Adrien Béraud824a7132021-04-17 17:25:27 -040039 devtool,
40 mode,
Adrien Béraudc4dd44a2021-04-08 01:05:24 -040041 module: {
42 rules: [
43 {
44 test: /\.jsx?/,
Adrien Béraude74741b2021-04-19 13:22:54 -040045 resolve: {
46 fullySpecified: false
47 },
Adrien Béraudc4dd44a2021-04-08 01:05:24 -040048 exclude: /node_modules/,
49 use: {
50 loader: 'babel-loader',
51 options: {
Adrien Béraude74741b2021-04-19 13:22:54 -040052 plugins: babelLoaderPlugins,
53 presets: [
54 ['@babel/preset-env', {
55 useBuiltIns: 'entry',
56 corejs:{ version: "3.10", proposals: true },
57 }],
58 '@babel/preset-react']
Adrien Béraudc4dd44a2021-04-08 01:05:24 -040059 }
60 }
61 },
62 {
Adrien Béraudfe56ba32021-04-08 00:32:11 -040063 test: /\.s[ac]ss$/i,
64 use: ['style-loader', 'css-loader', 'sass-loader'],
Adrien Béraudc4dd44a2021-04-08 01:05:24 -040065 }
66 ]
67 },
Adrien Béraud824a7132021-04-17 17:25:27 -040068 plugins
Adrien Béraudc4dd44a2021-04-08 01:05:24 -040069}