Skip to content

Commit 142b448

Browse files
committed
feat: add webpack hmr config
1 parent fbb4a1a commit 142b448

6 files changed

+63
-19
lines changed

package.json

+1
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@
8282
"postcss-loader": "^3.0.0",
8383
"postcss-nested": "^4.2.1",
8484
"prettier": "^2.1.0",
85+
"style-loader": "^1.2.1",
8586
"terser-webpack-plugin": "^3.0.1",
8687
"typescript": "^3.8.3",
8788
"url-loader": "^4.1.0",

src/index.tsx

+9-1
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,12 @@ const Root = () => {
1414
)
1515
}
1616

17-
ReactDOM.render(<Root />, document.getElementById('root'))
17+
const render = () => {
18+
ReactDOM.render(<Root />, document.getElementById('root'))
19+
}
20+
21+
render()
22+
23+
if ((module as any).hot) {
24+
;(module as any).hot.accept(['./pages/App.tsx'], () => render())
25+
}

webpack.base.config.js

-18
Original file line numberDiff line numberDiff line change
@@ -65,24 +65,6 @@ export default (env, argv) => {
6565
],
6666
include: /node_modules/
6767
},
68-
{
69-
test: /\.module\.css$/,
70-
use: [
71-
MiniCssExtractPlugin.loader,
72-
{
73-
loader: 'css-loader',
74-
options: {
75-
import: true,
76-
modules: {
77-
localIdentName: '[path][name]__[local]--[hash:base64:5]'
78-
},
79-
importLoaders: 1
80-
}
81-
},
82-
'postcss-loader'
83-
],
84-
include: /src/
85-
},
8668
{
8769
test: /\.(png|jpg|jpeg|gif|eot|ttf|woff|woff2|svg)$/,
8870
use: [

webpack.dev.config.js

+22
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,28 @@ import webpack from 'webpack'
22

33
export default {
44
devtool: 'cheap-module-eval-source-map',
5+
module: {
6+
rules: [
7+
{
8+
test: /\.module\.css$/,
9+
use: [
10+
'style-loader', // CSS的HMR需要使用style-loader
11+
{
12+
loader: 'css-loader',
13+
options: {
14+
import: true,
15+
modules: {
16+
localIdentName: '[path][name]__[local]--[hash:base64:5]'
17+
},
18+
importLoaders: 1
19+
}
20+
},
21+
'postcss-loader'
22+
],
23+
include: /src/
24+
},
25+
]
26+
},
527
plugins: [
628
new webpack.HotModuleReplacementPlugin()
729
],

webpack.prod.config.js

+23
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,31 @@
11
import { CleanWebpackPlugin } from 'clean-webpack-plugin'
22
import OptimizeCssAssetsWebpackPlugin from 'optimize-css-assets-webpack-plugin'
3+
import MiniCssExtractPlugin from 'mini-css-extract-plugin'
34
import cssnano from 'cssnano'
45

56
export default {
7+
module: {
8+
rules: [
9+
{
10+
test: /\.module\.css$/,
11+
use: [
12+
MiniCssExtractPlugin.loader,
13+
{
14+
loader: 'css-loader',
15+
options: {
16+
import: true,
17+
modules: {
18+
localIdentName: '[path][name]__[local]--[hash:base64:5]'
19+
},
20+
importLoaders: 1
21+
}
22+
},
23+
'postcss-loader'
24+
],
25+
include: /src/
26+
},
27+
]
28+
},
629
plugins: [
730
new CleanWebpackPlugin(),
831
new OptimizeCssAssetsWebpackPlugin({

yarn.lock

+8
Original file line numberDiff line numberDiff line change
@@ -8116,6 +8116,14 @@ strip-json-comments@^3.0.1:
81168116
resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.0.tgz#7638d31422129ecf4457440009fba03f9f9ac180"
81178117
integrity sha512-e6/d0eBu7gHtdCqFt0xJr642LdToM5/cN4Qb9DbHjVx1CP5RyeM+zH7pbecEmDv/lBqb0QH+6Uqq75rxFPkM0w==
81188118

8119+
style-loader@^1.2.1:
8120+
version "1.2.1"
8121+
resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-1.2.1.tgz#c5cbbfbf1170d076cfdd86e0109c5bba114baa1a"
8122+
integrity sha512-ByHSTQvHLkWE9Ir5+lGbVOXhxX10fbprhLvdg96wedFZb4NDekDPxVKv5Fwmio+QcMlkkNfuK+5W1peQ5CUhZg==
8123+
dependencies:
8124+
loader-utils "^2.0.0"
8125+
schema-utils "^2.6.6"
8126+
81198127
stylehacks@^4.0.0:
81208128
version "4.0.3"
81218129
resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-4.0.3.tgz#6718fcaf4d1e07d8a1318690881e8d96726a71d5"

0 commit comments

Comments
 (0)