-
Notifications
You must be signed in to change notification settings - Fork 16
/
Copy pathwebpack.common.js
122 lines (118 loc) · 2.95 KB
/
webpack.common.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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
const path = require('path');
const fs = require('fs');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const isProduction = process.env.NODE_ENV === 'production';
const dotenvPath = isProduction ? './.env' : './.env.development';
const publicPath = require('./modules/utils/webpack/public_path');
try {
if (fs.existsSync(path.resolve(__dirname, dotenvPath))) {
console.log(`${dotenvPath} loaded`)
} else {
console.error('');
console.error(`${dotenvPath} does not exist`);
console.error(`Please make a copy from .env.default and set the correct data`);
console.error('');
process.exit(1);
}
} catch(err) {
console.error(err);
process.exit(1);
}
let view;
const codeView = path.resolve(__dirname, 'code/view/index.html')
const phoenixView = path.resolve(__dirname, 'view/index.html')
if (fs.existsSync(codeView)) {
view = codeView;
console.log('custom view loaded');
} else {
view = phoenixView;
}
const dotenv = require('dotenv');
const env = dotenv.config({
path: dotenvPath
}).parsed;
const ASSETS_PATH = env.ASSETS_PATH || 'assets';
module.exports = {
entry: './client/index.js',
output: {
filename: isProduction ? `${ASSETS_PATH}/main.[contentHash].js` : `${ASSETS_PATH}/main.js`,
chunkFilename:
isProduction ? `${ASSETS_PATH}/[name].[contentHash].js` : `${ASSETS_PATH}/[name].js`,
path: path.resolve(__dirname, 'dist'),
publicPath
},
devServer: {
port: env.PORT,
historyApiFallback: {
index: publicPath
},
compress: true,
open: true,
publicPath
},
plugins: [
new HtmlWebpackPlugin({
template: view,
inject: true,
title: env.APP_NAME
})
],
module: {
rules: [
{
test: /\.(js|ts)x?$/,
exclude: /node_modules/,
use: [
{
loader: 'babel-loader',
options: {
cacheDirectory: true,
presets: [
"@babel/preset-typescript",
[
"@babel/preset-env",
{
"useBuiltIns": "usage",
"corejs": 3
}
],
"@babel/preset-react"
],
plugins: [
"react-loadable/babel",
"@babel/plugin-syntax-dynamic-import"
]
}
},
'eslint-loader'
]
},
{
test: /\.(png|svg|jpg|gif)$/,
use: [
{
loader: 'file-loader',
options: {
outputPath: `./${ASSETS_PATH}`
}
}
]
},
{
test: /\.(woff|woff2|eot|ttf|otf)$/,
use: [
{
loader: 'file-loader',
options: {
outputPath: `./${ASSETS_PATH}`
}
}
]
}
]
},
resolve: {
// Enable webpack find ts and tsx files without an extension
extensions: ['.tsx', '.ts', '.jsx', '.js'],
}
};