forked from Linkvalue-Interne/LvConnect
-
Notifications
You must be signed in to change notification settings - Fork 0
/
webpack.config.js
96 lines (95 loc) · 2.7 KB
/
webpack.config.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
const path = require('path');
const { DefinePlugin, ContextReplacementPlugin } = require('webpack');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const { CleanWebpackPlugin } = require('clean-webpack-plugin');
const TerserPlugin = require('terser-webpack-plugin');
const WebappWebpackPlugin = require('webapp-webpack-plugin');
// eslint-disable-next-line import/no-extraneous-dependencies
const config = require('@lvconnect/config/server');
module.exports = {
entry: {
main: './index.jsx',
oauth: './oauth.jsx',
},
context: path.resolve(__dirname, './packages/app/'),
devtool: process.env.NODE_ENV === 'production' ? 'source-map' : 'cheap-module-source-map',
output: {
path: path.resolve(__dirname, './dist'),
filename: '[name]-[hash].js',
chunkFilename: '[name]-[hash].js',
publicPath: config.proxyWebpackDevServer ? 'http://localhost:8080/' : '/',
},
resolve: {
alias: {
'react-dom': '@hot-loader/react-dom',
},
extensions: ['.jsx', '.js', '.json'],
},
optimization: {
minimizer: [new TerserPlugin({
cache: true,
parallel: true,
})],
splitChunks: {
name: 'vendors',
chunks: 'all',
},
},
module: {
strictExportPresence: true,
rules: [
{ parser: { requireEnsure: false } },
{
test: /\.(ttf|woff|woff2)$/,
use: {
loader: 'file-loader',
options: {
name: 'fonts/[name]-[hash].[ext]',
},
},
},
{
test: /\.jsx?$/,
use: {
loader: 'babel-loader',
options: { cacheDirectory: true },
},
exclude: /node_modules/,
},
{
test: /\.(svg|png|jpg|jpeg|gif)$/,
use: { loader: 'url-loader', options: { limit: 1, name: '[path][name]-[hash].[ext]' } },
},
],
},
mode: process.env.NODE_ENV === 'production' ? 'production' : 'development',
devServer: {
headers: {
'Access-Control-Allow-Origin': '*',
},
historyApiFallback: true,
overlay: true,
progress: true,
proxy: [{
context: ['/oauth', '/users', '/login', '/forgot-password', '/reset-password', '/old', '/mdl', '/apps', '/hooks'],
target: 'http://localhost:8000',
}],
},
plugins: [
new ContextReplacementPlugin(/moment[/\\]locale$/, /fr/),
new CleanWebpackPlugin(),
new HtmlWebpackPlugin({
template: './index.html',
chunks: ['main', 'vendors'],
}),
new HtmlWebpackPlugin({
template: './oauth.html',
filename: 'oauth.html',
chunks: ['oauth', 'vendors'],
}),
new DefinePlugin({
'process.env.APP_ENV': `"${process.env.APP_ENV || 'dev'}"`,
}),
new WebappWebpackPlugin('./assets/images/icon.png'),
],
};