最近开始使用sveltejs模板使用Svelte。一切运行正常,但是当我对文件做任何更改时,它不会将更改重新加载到web浏览器,因此我必须手动刷新页面才能看到更改。设置中是否有启用该功能的选项,或者在这一点上是否不可能?
发布于 2019-04-25 14:38:58
默认模板(https://github.com/sveltejs/template)使用Rollup,不支持热模块重载。webpack版本(https://github.com/sveltejs/template-webpack)将支持HMR,但首先我们需要向Svelte本身添加一些钩子,以使其成为可能。有一个问题你可以追踪here --希望我们很快就能完成这项工作。
在此之前,Tholle建议使用livereload插件可能是最好的折衷方案。
发布于 2019-11-25 11:40:41
只是为了反驳作者关于他自己的libs,我要争辩说,公认的答案都是错误的。
Rollup可以使用rollup-plugin-hot的HMR。正如之前在评论中提到的,Nollup也可以做到这一点。
这样,你就可以更新推送到浏览器的代码,并刷新(即销毁+重新创建)整个应用程序,而无需重新加载页面。然而,这并不比重新加载整个页面要好得多。
您想要的是只替换受代码更新影响的Svelte组件,以便保留您当前的应用程序状态,并且,尽可能多地,您还希望保留更新组件的状态。为此,您可以使用具有汇总/汇总的rollup-plugin-svelte-hot,或具有Webpack的svelte-loader-hot。
在等待官方支持之前,我维护了官方模板的克隆+ HMR:用于汇总/汇总的svelte-template-hot和用于Webpack的svelte-template-webpack-hot。还有Sapper的sapper-template-hot (只支持Webpack)。而且,为了完整起见,svelte-native-template (不是由我维护)还包含了对HMR的支持。
HMR仍然没有得到Svelte的官方支持。Rich的答案中提到的问题已经结束。现在可以在this issue中跟踪进度。
(当然,Rich的答案在最初编写时是正确的。从官方的角度来看,这仍然是正确的。这个答案是宣传我自己的项目的一个无耻的插头,因为这个问题在Google中排名很高,但我希望它仍然有用。)
https://stackoverflow.com/questions/55842088
复制