我有一个服务器端渲染的production
模式Vite应用程序。我的问题是:通常网页将重新加载,控制台将显示[vite] connecting...
。我将其追溯到vite代码库的热模块重载部分。然而,我不希望hmr
为production
打开,但无论我将下面的两个设置设置为false
,它似乎仍然打开:
在我的vite.config.js
文件中,我有:
...
export default defineConfig({
server: {
hmr: false,
},
也在我的NodeJSserver.js
文件我有:
const vite = await createViteServer({
server: { middlewareMode: 'ssr', hmr: false },
})
如何关闭Vite的hmr
?
添加到您的app.js
文件:
if (import.meta.hot)
import.meta.hot.accept(() => import.meta.hot.invalidate())
并在vite.config.js
文件中添加false
到'defineConfig'
:
server.hmr.overlay property
defineConfig({
server: {
/*here*/
hmr: { overlay: false }
}, ...
})
Vite有一个HMR API,允许您在重新加载期间使模块无效。您可能也对HMR服务器配置感兴趣,它可以在您的vite.config.ts
文件中配置。
// index.ts
if (import.meta.hot) {
import.meta.hot.accept(() => {
import.meta.hot.invalidate();
})
}
Vite还有一个--no-hmr
标志用于禁用热模块重载。
vite --no-hmr
不幸的是,这两种解决方案都不适合我。这就是为什么我在主/索引文件中添加了以下代码,以便在HMR发生后强制浏览器重新加载。
// index.ts
if (window['reload']) window.location = window.location;
window['reload'] = true;