blob: 0e968822e3752f3b891c7d33568e6279379742a4 [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'
9console.log(resolve(__dirname, '..', '.env'))
10dotenv.config({ path: resolve(__dirname, '..', '.env') })
11
12import { resolve } from 'path'
13import HtmlWebpackPlugin from 'html-webpack-plugin'
14import CopyWebpackPlugin from 'copy-webpack-plugin'
Adrien Béraud824a7132021-04-17 17:25:27 -040015const mode = process.env.NODE_ENV || 'development'
16
Adrien Béraude74741b2021-04-19 13:22:54 -040017let entry = [resolve(__dirname, 'src', 'index.js')]
Adrien Béraud150b4782021-04-21 19:40:59 -040018let plugins = [
19 new HtmlWebpackPlugin({template: resolve(__dirname, 'src', 'index.ejs')}),
20 new CopyWebpackPlugin({
21 patterns: [{ from: resolve(__dirname, 'public'), to: resolve(__dirname, 'dist') }]
22 })
23]
Adrien Béraud824a7132021-04-17 17:25:27 -040024let devtool = undefined
Adrien Béraude74741b2021-04-19 13:22:54 -040025let babelLoaderPlugins = ["@babel/plugin-transform-runtime"]
Adrien Béraud824a7132021-04-17 17:25:27 -040026
27if (mode === 'development') {
Adrien Béraude74741b2021-04-19 13:22:54 -040028 const webpack = (await import('webpack')).default
29 const ReactRefreshWebpackPlugin = (await import('@pmmmwh/react-refresh-webpack-plugin')).default
30 entry = ['webpack-hot-middleware/client', ...entry]
31 plugins = [new webpack.HotModuleReplacementPlugin(), new ReactRefreshWebpackPlugin(), ...plugins]
32 babelLoaderPlugins = [...babelLoaderPlugins, "react-refresh/babel"]
Adrien Béraud824a7132021-04-17 17:25:27 -040033 devtool = 'inline-source-map'
34}
35console.log(`Webpack configured for ${mode}`)
Adrien Béraudc4dd44a2021-04-08 01:05:24 -040036
Adrien Béraude74741b2021-04-19 13:22:54 -040037export default {
Adrien Béraud824a7132021-04-17 17:25:27 -040038 entry,
Adrien Béraudc4dd44a2021-04-08 01:05:24 -040039 output: {
Adrien Béraude74741b2021-04-19 13:22:54 -040040 path: resolve(__dirname, 'dist'),
Adrien Béraudc4dd44a2021-04-08 01:05:24 -040041 filename: 'bundle.js',
42 publicPath: '/'
43 },
Adrien Béraud824a7132021-04-17 17:25:27 -040044 devtool,
45 mode,
Adrien Béraudc4dd44a2021-04-08 01:05:24 -040046 module: {
47 rules: [
48 {
49 test: /\.jsx?/,
Adrien Béraude74741b2021-04-19 13:22:54 -040050 resolve: {
51 fullySpecified: false
52 },
Adrien Béraudc4dd44a2021-04-08 01:05:24 -040053 exclude: /node_modules/,
54 use: {
55 loader: 'babel-loader',
56 options: {
Adrien Béraude74741b2021-04-19 13:22:54 -040057 plugins: babelLoaderPlugins,
58 presets: [
59 ['@babel/preset-env', {
60 useBuiltIns: 'entry',
61 corejs:{ version: "3.10", proposals: true },
62 }],
63 '@babel/preset-react']
Adrien Béraudc4dd44a2021-04-08 01:05:24 -040064 }
65 }
66 },
67 {
Adrien Béraudfe56ba32021-04-08 00:32:11 -040068 test: /\.s[ac]ss$/i,
69 use: ['style-loader', 'css-loader', 'sass-loader'],
Adrien Béraudc4dd44a2021-04-08 01:05:24 -040070 }
71 ]
72 },
Adrien Béraud824a7132021-04-17 17:25:27 -040073 plugins
Adrien Béraudc4dd44a2021-04-08 01:05:24 -040074}