markdown 的WebPack-HMR

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了markdown 的WebPack-HMR相关的知识,希望对你有一定的参考价值。

## 概述
模块热替换(Hot Module Replacement 简称HMR)是webpack提供的非常有用的功能,它允许在运行时更新各个模块而无需进行完全刷新。HMR适用于开发环境,在页面开发调试过程中,当代码发生改变,只会影响发生改变的模块,其他模块的状态得以保留,因此不需要从头开始操作。

## 使用
HMR的使用非常简单,我们只需要进行下面几步操作:
* 更新webpack-dev-server的配置开启HMR;

```js
{
  devServer: {
    contentBase: './build',
    hot: true
  }
}
```

* 引入webpack内置的HMR插件:

```js
{
  plugins: [
    new webpack.NamedModulePlugin(),
    new webpack.HotModuleReplacementPlugin()
  ]
}
// 添加NamedModulePlugin以便更容易查看要修补的依赖
```
* 在js入口文件中增加module.hot判断逻辑

```js
if (module.hot) {
  module.hot.accept('./app.js', () => {
    doSomething();
  });
}

```

> 为了使HMR正常工作babel-preset-es2015需要禁用module,["es2015", { "modules": false }];

> 还好style-loader对HMR的支持,使我们在改变样式文件时,不需要做任何样式相关的配置就能支持;

## React中的使用
为了在react项目中使用HMR,我们需要用到react-hot-loader,并且我们需要做如下配置:
* 在babelrc中使用HMR插件:

```js
// .babelrc
{
  "plugins": ["react-hot-loader/babel"]
}
```

* 按照上面的方式开启HMR;
* 在entry文件中打包patch文件;

```js
// webpack.config.js
module.exports = {
  entry: ['babel-polyfill', 'react-hot-loader/patch', './main.js'],
}
```
* 用<AppContainer>包裹项目的入口组件:

```js
// main.js
import React from 'react'
import ReactDOM from 'react-dom'
import { AppContainer } from 'react-hot-loader'
import App from './app'

const render = Component => {
  ReactDOM.render(
    <AppContainer>
      <Component />
    </AppContainer>,
    document.getElementById('root'),
  )
}

render(App)

// Webpack Hot Module Replacement API
if (module.hot) {
  module.hot.accept('./containers/App', () => {
    render(App)
  })
}
```

> 为了使HMR在嵌套routes下工作,devserver的publicPath必须设置为'\';

## 参考
* https://doc.webpack-china.org/guides/hot-module-replacement/
* https://doc.webpack-china.org/concepts/hot-module-replacement/
* https://doc.webpack-china.org/api/hot-module-replacement
* https://www.andrewhfarmer.com/webpack-hmr-tutorial/
* https://github.com/gaearon/react-hot-loader

以上是关于markdown 的WebPack-HMR的主要内容,如果未能解决你的问题,请参考以下文章

Next.js:_next/webpack-hmr 请求 404

Next.js:_next / webpack-hmr请求404

Next.js 应用在生产环境中频繁重新加载

Markdown温故知新:Markdown面面观

markdown [Markdown HowTo]作为Markdown语法的秘籍

新浪博客怎么写markdown