hmr
约 1 分钟阅读
- live reload - 检测到变化刷新页面
- 通常使用一个 EventSource - SSE
- esbuild#802GitHub Issueevanw/esbuild#802
- HMR - Hot Module Replacement - Hot Module Reload
- 强调保留状态
- Webpack
- Vite HMR APILinkvitejs.dev/guide/api-hmr.htmllive reload - 检测到变化刷新页面 · 通常使用一个 EventSource - SSE · esbuild#802 · HMR - Hot Module Replacement - Hot Module Reload · 强调保留状态笔记:hmr
- 接口与 Webpack 类似但不相同
- React Fast Refresh
- HMR 更进一步 - 组件纬度
- 支持的 bundler
- rn, parcel2, webpack, cra, nextjs, vite
- 检测到变化,更新组件,re-render
- 如果 exports 不止 react 组件,还会更新其他 import 依赖
- prevExports
- 上次的组件
- reactnative.dev/docs/fast-refresh
- react-hot-loaderGitHubgaearon/react-hot-loader
- fast refresh 之前的方案
Vite HMR
interface ImportMeta {
// 判断当前是否为 HMR 环境
readonly hot?: ViteHotContext;
}
type ModuleNamespace = Record<string, any> & {
[Symbol.toStringTag]: 'Module';
};
interface ViteHotContext {
// 持久化数据
readonly data: any;
// 接受新的模块 - HMR boundary
accept(): void;
accept(cb: (mod: ModuleNamespace | undefined) => void): void;
accept(dep: string, cb: (mod: ModuleNamespace | undefined) => void): void;
accept(deps: readonly string[], cb: (mods: Array<ModuleNamespace | undefined>) => void): void;
// 销毁前回调
dispose(cb: (data: any) => void): void;
// 不可 HMR
decline(): void;
invalidate(): void;
// vite:beforeUpdate, vite:beforeFullReload, vite:beforePrune, vite:invalidate, vite:error
// `InferCustomEventPayload` provides types for built-in Vite events
on<T extends string>(event: T, cb: (payload: InferCustomEventPayload<T>) => void): void;
send<T extends string>(event: T, data?: InferCustomEventPayload<T>): void;
}react refresh
- react/packages/react-refreshGitHub Filefacebook/react/packages/react-refresh
- react#16604GitHub Issuefacebook/react#16604
$RefreshReg$$RefreshSig$
- pmmmwh/react-refresh-webpack-pluginGitHubpmmmwh/react-refresh-webpack-plugin
$RefreshHelpers$
// reload
/* @refresh reset */关联信息
反向链接、本文链接的其他页面和外部资料。
References
GitHub5 条
- evanw/esbuild#802github.com/evanw/esbuild/issues/802
- facebook/react/packages/react-refreshgithub.com/facebook/react/tree/main/packages/react-refresh
- facebook/react#16604github.com/facebook/react/issues/16604
- gaearon/react-hot-loadergithub.com/gaearon/react-hot-loader
- pmmmwh/react-refresh-webpack-plugingithub.com/pmmmwh/react-refresh-webpack-plugin
其他外链4 条
- reactnative.dev/docs/fast-refreshreactnative.dev/docs/fast-refresh
- vitejs.dev/guide/api-hmr.htmlvitejs.dev/guide/api-hmr.html
- webpack.js.org/api/hot-module-replacementwebpack.js.org/api/hot-module-replacement
- webpack.js.org/concepts/hot-module-replacementwebpack.js.org/concepts/hot-module-replacement