如火热链接到css,2017年12月聚合文章--webpack 3 零基础入门教程 #12 - 如何使用模块热替换 HMR 来处理 CSS | 码友网...

模块热替换 是什么意思?

以前我们使用的 webpack --watch 或 webpack-dev-server 的功能是监听文件改变,就自动刷新浏览器,而这个 模块热替换 不用刷新浏览器,它是只让修改到的模块,才会在浏览器上发生相应的变化,就是生效,而不是重新刷新浏览器。

为什么要这么做呢?有时候模块越多,改得频繁,刷新起来还是很慢的,效率低呀。

所以有了 模块热替换 的功能,我们来试一下,让我们一改 CSS 然后浏览器不用刷新就会让页面生效改变。

1. 启用 HMR

webpack.config.js

devServer: {

port: 9000,

open: true,

}

改成下面这样:

devServer: {

port: 9000,

open: true,

hot: true

}

webpack.config.js

...

const webpack = require('webpack');

...

module.exports = {

entry: {

"app.bundle": './src/app.js',

"contact": './src/contact.js'

},

output: {

path: path.resolve(__dirname, 'dist'),

filename: '[name].[chunkhash].js'

},

devServer: {

port: 9000,

open: true,

hot: true

},

plugins: [

new CleanWebpackPlugin(pathsToClean),

...

// 这两行是新增的

new webpack.NamedModulesPlugin(),

new webpack.HotModuleReplacementPlugin()

],

...

};

可惜,报错了个错:

92c2428cc11547cee3c9f174bc722c78.png

文件名还不能用 chunkhash 了,它说要用 hash 来代替 chunkhash 。

我们来改一下:

filename: '[name].[chunkhash].js'

变成

filename: '[name].[hash].js'

2. 处理 extract-text-webpack-plugin

现在你试一下改变 src/app.scss 的内容,你会发现页面不动了,你无论怎么改,页面都不会改变,也不会刷新。

之前我们是用 extract-text-webpack-plugin 这个插件来处理 CSS 的,在用 HMR 的时候要先把它关闭一下。

用一个参数 disable: false 就可以关闭掉。

webpack.config.js

new ExtractTextPlugin("style.css")

变成

new ExtractTextPlugin({

filename: 'style.css',

disable: false

}),

然后把处理 scss 文件的 loader 部分变成类似下面这样:

...

test: /\.scss$/,

use: ExtractTextPlugin.extract({

fallback: 'style-loader',

//resolve-url-loader may be chained before sass-loader if necessary

use: ['css-loader', 'sass-loader']

})

...

变成

...

test: /\.scss$/,

use: ['style-loader', 'css-loader', 'sass-loader']

...

再试试,能够生效。

f71cebf6e5ab1bf26305916c1b0d9b72.png

f6fa4f2305b0a1dba5a98bd011b12b64.png

为什么要关闭呢这个插件呢?

其实想想也能知道,在开发环境下,用不用 extract-text-webpack-plugin 这个插件,意义不大,你把 css 变不变成一个文件,关系不大,开发环境只要能调效,效果能够看到就可以,但是生产环境需要这个插件,我们总不能开发环境不使用这个插件,也导致生产环境也不使用吧?

那如何解决这个问题呢?也就是说让生产环境使用这个插件,而开发环境不使用,我们下节来讨论这个问题。

先这么多吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值