-
Notifications
You must be signed in to change notification settings - Fork 31
/
webpack.config.dev.js
124 lines (115 loc) · 3.39 KB
/
webpack.config.dev.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
123
124
// @ts-check
const path = require('path')
const webpack = require('webpack')
const HtmlWebpackPlugin = require('html-webpack-plugin')
const ReactRefreshWebpackPlugin = require('@pmmmwh/react-refresh-webpack-plugin')
const {envVars, MAIN_ENTRY_POINT, config, cleanList, when} = require('./shared/index.js')
const definePlugin = require('./shared/define.js')
const manifestLoaderRules = require('./shared/module-rules-manifest-loader.js')
const {aliasFromConfig, defaultAlias} = require('./shared/resolve-alias.js')
const {supportLegacyBrowsers, cacheDirectory} = require('./shared/config.js')
const {resolveLoader} = require('./shared/resolve-loader.js')
const createCompilerRules = require('./shared/module-rules-compiler.js')
const outputPath = path.join(process.cwd(), 'dist')
const {CI = false, PWD = ''} = process.env
process.env.NODE_ENV = 'development'
/** @typedef {import('webpack').Configuration} WebpackConfig */
const webpackConfig = {
name: 'client-local',
mode: 'development',
context: path.resolve(PWD, 'src'),
resolve: {
alias: {
...defaultAlias,
...aliasFromConfig
},
fallback: {
fs: false,
http: require.resolve('stream-http'),
https: require.resolve('https-browserify'),
buffer: require.resolve('buffer/'),
url: require.resolve('url/'),
stream: false,
zlib: false,
timers: false
},
modules: ['node_modules', path.resolve(process.cwd())],
extensions: ['.js', '.tsx', '.ts', '.json']
},
stats: 'errors-only',
entry: {
app: MAIN_ENTRY_POINT
},
devServer: {
static: outputPath,
hot: true
},
cache: {
type: 'filesystem',
cacheDirectory,
compression: 'gzip'
},
target: 'web',
optimization: {
checkWasmTypes: false,
emitOnErrors: false,
removeAvailableModules: false,
removeEmptyChunks: false,
runtimeChunk: true,
splitChunks: false
},
output: {
path: outputPath,
pathinfo: false,
publicPath: '/'
},
plugins: [
new webpack.ProvidePlugin({
process: 'process/browser.js'
}),
new webpack.EnvironmentPlugin(envVars(config.env)),
definePlugin({__DEV__: true}),
new HtmlWebpackPlugin({
template: './index.html',
inject: true,
env: process.env
}),
new ReactRefreshWebpackPlugin({overlay: false})
],
resolveLoader,
module: {
rules: cleanList([
createCompilerRules({supportLegacyBrowsers, isDevelopment: true}),
{
test: /(\.css|\.scss)$/,
use: cleanList([
require.resolve('style-loader'),
when(config['externals-manifest'], () => ({
loader: 'externals-manifest-loader',
options: {
manifestURL: config['externals-manifest']
}
})),
require.resolve('css-loader'),
{
loader: require.resolve('postcss-loader'),
options: {
postcssOptions: {
plugins: [
require('autoprefixer')({
overrideBrowserslist: config.targets
})
]
}
}
},
require.resolve('@s-ui/sass-loader')
])
},
when(config['externals-manifest'], () => manifestLoaderRules(config['externals-manifest']))
])
},
watch: !CI,
devtool: config.sourcemaps && config.sourcemaps.dev ? config.sourcemaps.dev : false
}
module.exports = webpackConfig