【问题标题】:Failing to generate dynamic routes with Sapper export无法使用 Sapper 导出生成动态路由
【发布时间】:2020-02-18 11:14:35
【问题描述】:

我有一条动态路线:

routes/artwork/[slug].svelte.

npm run dev 一切正常。

但是当我npm run export 时,那些动态的 slug 路线就不见了。我在__sapper__/export 中没有看到它们,当我上传到 Netlify 时,这些页面也丢失了。

有什么线索可以解决这个问题吗?我错过了什么明显的东西吗?

【问题讨论】:

    标签: svelte sapper


    【解决方案1】:

    sapper export 的工作原理是构建您的应用程序,运行它,然后访问 / 并递归访问它找到的每个内部链接。因此,必须可以通过主页上的链接访问/artwork/foo 和/artwork/bar 等(例如,通过routes/artwork/index.svelte 页面,该页面将映射到/artwork)。

    【讨论】:

    • 谢谢里奇。我想问题是我不使用routes/artwork/index.svelte 只是routes/artwork/[slug].svelte。这不可能吗?
    • 要清楚我的每个页面都使用Feed 组件,然后该组件具有指向artwork/{slug} 的链接。所以我在想export 会为那些动态链接抓取那些页面(显然它们存在),但是如果我需要在我的主页上直接链接到/artwork?再次感谢。
    • 它不需要是direct,但是是的,您需要一个可通过主页访问的链接somewhere。 (它不需要是可见链接,如果您不希望它出现在导航等中 - <a hidden href="artwork">Artwork</a> 也可以正常工作)
    • 哦,我找到了问题的根本原因。我有一个包装每个页面的TransitionWrapper 组件,它有一个{#if show},它是false 开始并在装载时翻转为true。这是为了在首次加载页面时允许淡入淡出过渡。我将不得不解决这个问题,但只是为了确认export 确实按照我最初使用Feed 组件中的链接的方式工作。再次感谢您抽出宝贵时间,Rich,我是 Svelte 的忠实信徒!
    • 所以只是为了总结是否有人遇到这个问题:我在导航栏中添加了一个隐藏链接到artwork 页面。艺术品页面不使用TransitionWrapper(这无关紧要,因为它无论如何都被隐藏了)。我所有的动态链接都是用npm export生成的
    【解决方案2】:

    为Rich Harris's answer添加额外的上下文:

    如果在动态路由之前爬错了类似的路由URL,则不会尝试生成动态路由。

    主页链接使用"/events/slug" 而不是href="events/slug",开发站点将在主页链接上正确提供404,并在活动页面上提供动态slug。但是,在构建时,根本不会生成 slug。

    【讨论】:

      【解决方案3】:

      正如collardeau 所提到的,在我的情况下,问题是我将页面组件包装在一个TransitionWrapper 组件中,该组件具有{#if show},即false 启动并在装载时翻转为true。一个简单的解决方法是使用true 启动它,然后在安装时翻转它两次:

      // TransitionWrapper.svelte
      ...
      let show = true;
      
      onMount(() => {
          show = false;
          show = true;
      });
      ...
      

      由于代码在 onMount 内部执行,根据我运行的测试,它可以正常工作

      【讨论】:

        【解决方案4】:

        万一有人遇到这个问题。上面的解决方案并没有真正帮助导致 我有很多嵌套路由,您无法使用 --entries 方法指定这些路由。

        但是有效的是在我的routes 文件夹中创建一个404.svelte 文件,然后将其添加到我的package.json

        "export": "sapper export --legacy --entry \"/ /404\"",
        "postexport": "mv __sapper__/export/404/index.html __sapper__/export/404.html",
        

        这个解决方案的来源来自这个github issue

        【讨论】:

          猜你喜欢
          • 2020-02-22
          • 2023-03-03
          • 2021-01-18
          • 2016-11-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-07-05
          • 2021-03-12
          相关资源
          最近更新 更多