【问题标题】:Svelte Hot Reloading IssueSvelte 热重载问题
【发布时间】:2019-09-14 11:04:17
【问题描述】:

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

【问题讨论】:

标签: svelte hot-reload


【解决方案1】:

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

在此之前,Tholle 建议使用 livereload 插件可能是最好的折衷方案。

【讨论】:

  • 来自 Twitter 的评论表明,Nollup 可以用于 Rollup 项目中的 HMR — 我自己没有使用过它,YMMV,但听起来很有希望mobile.twitter.com/PepsRyuu/status/1121808611217420290
  • 干得好 Rich,我对 v3 印象深刻。关于 TypeScript 支持的任何想法和时间表?
  • 没有时间线,没有——只是“当我们找到它的时候”。虽然这是一个优先事项!
  • 刚刚测试了 npx degit sveltejs/template my-appnpx degit "sveltejs/sapper-template#rollup" my-appnpm installnpm run dev,这两个模板都可以与 HMR 一起使用。 2020-05-03
【解决方案2】:

只是为了反驳作者自己的库,我要争辩说公认的答案都是错误的。

汇总可以通过rollup-plugin-hot 拥有 HMR。正如之前在 cmets 中提到的,Nollup 也可以做到。

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

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

等待官方支持,我维护官方模板 + HMR 的克隆:svelte-template-hot 用于 Rollup / Nollup,svelte-template-webpack-hot 用于 Webpack。 Sapper 还有sapper-template-hot(仅支持Webpack)。而且,为了完整起见,svelte-native-template(不是我维护的)还包括 HMR 支持。

Svelte 仍未正式支持 HMR。 Rich的回答中提到的问题已关闭。现在可以在this issue 中跟踪进度。

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

【讨论】:

    猜你喜欢
    • 2022-07-18
    • 1970-01-01
    • 2021-12-23
    • 2019-09-21
    • 2017-12-30
    • 2019-10-31
    • 1970-01-01
    • 2021-04-25
    • 2016-10-10
    相关资源
    最近更新 更多