HMRとは
を意味しHot Module Replacement
、と略されますHMR
。更新する必要があるモジュールについては、「ホット」置換を実行します。いわゆるホット置換とは、ページを更新せずに特定の変更をシームレスに更新することを指します。を設定しない場合HMR
、変更を加えるたびに変更結果を確認するためにページを更新する必要があります。デバッグの場合、非常に面倒で非効率的です。最も重要なことは、インターフェース上で変更したデータが、ページが更新されるとページは失われますが、Webpack
ホット アップデートと同様のメカニズムがある場合はコードが変更され、更新は行われませんが、既存のデータ状態が保持され、モジュールの更新と置換のみが行われます。つまり、既存のデータの状態が保存されるだけでなく、コード変更後の変更も確認できます。
要約:
- ページの読み込み時にアプリケーションの状態を保存する
- 変更された内容のみを更新し、デバッグ時間を節約します
- スタイルの変更は高速であり、ブラウザでスタイルを変更するのとほぼ同等です。
依存関係をインストールする
$ npm install webpack webpack-dev-server --save-dev
package.json
:
"dependencies": {
"webpack": "^4.41.2",
"webpack-dev-server": "^3.10.1"
},
構成
webpack
:
devServer: {
contentBase: path.resolve(__dirname, 'dist'),
hot: true,
historyApiFallback: true,
compress: true
},
-
hot
の場合true
、ホット アップデートを有効にすることを意味します -
contentBase
コンテンツの提供元をサーバーに指示することを示します。(つまり、サーバー起動時のルート ディレクトリ。デフォルトは現在の実行ディレクトリです。通常は設定する必要はありません) -
historyApiFallback
HTML5
Historyを使用する場合API
、index.html
ほとんどの場合、404 応答の代わりにこのページを提供する必要があります。 -
compress
すべてのサービスのgzip
圧縮を有効にする
plugins: {
HotModuleReplacementPlugin: new webpack.HotModuleReplacementPlugin()
},
ホットアップデートプラグインを設定する
module: {
rules: [
{
test: /\.(css|less)$/,
use: [
process.env.NODE_ENV == 'development' ? { loader: 'style-loader' } : MiniCssExtractPlugin.loader,
{
loader: 'css-loader',
options: {
importLoaders: 1
}
}
]
}
]
},
style-loader
ライブラリはHMR
インターフェイスを実装しており、HMR
更新を 経由で受信すると、古いスタイルを新しいスタイルに置き換えます。異なる使用法で開発環境と実稼働環境を区別します。loader。
src/index.jsx
:
if (module.hot) {
module.hot.accept();
}
エントリ ファイルに上記のコードを追加するだけです。非常に簡単です。
反応ホットローダー
react-hot-loader
プラグイン、ポータル
使い方
インストール
$ npm install react-hot-loader --save-dev
構成babelrc
{
"plugins": ["react-hot-loader/babel"]
}
ルートコンポーネントをホットエクスポートとしてマークする
import { hot } from 'react-hot-loader/root';
const App = () => <div>Hello World!</div>;
export default hot(App);
React
との前にReact Dom
、必ずReact
ホットローダーを要求してください。
// webpack.config.js
module.exports = {
entry: ['react-hot-loader/patch', './src'],
// ...
};
問題に遭遇する
- その場合は
You cannot change <Router history>
、次のように設定します。
import { hot } from 'react-hot-loader/root';
const Routes = () => {};
export default hot(Routes);
- ホット アップデートを構成した後、
webpack
自動コンパイルの問題が 2 回発生しました。これは非常に頻繁に発生します。具体的な原因は分析されていません。適切な解決策を見つけました。構成:
watchOptions: {
aggregateTimeout: 600
},
他にも問題が発生する可能性があり、たとえば、そのindex.html
ページを何度も導入したり、グローバルにインストールしたのにindex.js
ローカルに複製され、グローバルをアンインストールしたりすることができます。webpack-dev-server
webpack-dev-server
webpack-dev-server
ケース
ブログ
私のブログをフォローすることを歓迎します