Svelte热装问题

时间:2019-04-25 04:59:11

标签: svelte hot-reload

最近开始使用sveltejs模板玩Svelte。一切工作正常,但是当我对文件进行任何更改时,它都不会将更改热加载到Web浏览器中,因此,我必须手动刷新页面才能查看更改。设置中是否有任何选项可以启用该功能,或者目前无法执行此操作?

2 个答案:

答案 0 :(得分:5)

默认模板(https://github.com/sveltejs/template)使用Rollup,该模板不支持热模块重新加载。 webpack版本(https://github.com/sveltejs/template-webpack支持HMR,但是首先我们需要在Svelte自身上添加一些钩子以使其成为可能。您可以跟踪here,这是一个问题-希望我们能够尽快完成这项工作。

直到那时,Tholle的使用livereload插件的建议可能是最好的折衷方案。

答案 1 :(得分:0)

仅出于与作者关于自己的音乐库的矛盾之处,我将争辩说公认的答案都是错误的。

汇总可以使用rollup-plugin-hot进行HMR。如评论中先前所述,Nollup也可以做到。

只有这样,您可以将更新的代码推送到浏览器并刷新(即销毁并重新创建)整个应用程序,而无需重新加载页面。但是,这根本不比重新加载整个页面更好。

您想要的是仅替换受代码更新影响的Svelte组件,以便保留您当前的应用程序状态,并尽可能地也希望保留更新组件的状态。为此,您可以将rollup-plugin-svelte-hot与Rollup / Nollup结合使用,或者将svelte-loader-hot与Webpack结合使用。

在获得官方支持之前,我维护官方模板+ HMR的克隆:svelte-template-hot用于汇总/ Nollup,svelte-template-webpack-hot用于Webpack。 Sapper也有sapper-template-hot(仅支持Webpack)。而且,出于完整性考虑,svelte-native-template(我未维护)还包括HMR支持。

SMRTE仍未正式支持HMR。 Rich的答案中提到的问题已解决。现在可以在this issue中跟踪进度。

(当然,Rich的答案在最初编写时是正确的。而且从官方角度来看仍然是正确的。这个答案是宣传我自己的项目的无耻插件,因为该问题在Google中的排名很高,但是我希望它仍然有用。)