无法通过Sapper导出生成动态路由

时间:2019-10-22 10:14:31

标签: svelte sapper

我有一条动态路线:

routes/artwork/[slug].svelte

npm run dev都可以很好地工作。

但是当我npm run export时,那些动态弹头路线丢失了。我没有在__sapper__/export中看到它们,并且当我上传到Netlify时页面也丢失了。

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

3 个答案:

答案 0 :(得分:1)

sapper export的工作方式是构建您的应用程序,然后运行它,然后访问/,并递归访问它找到的每个内部链接。因此,必须有可能通过跟随主页上的链接(例如,通过/artwork/foo页面进入/artwork/barroutes/artwork/index.svelte来映射到{{1} }。

答案 1 :(得分:0)

要将其他上下文添加到Rich Harris's answer

如果在动态路由之前未正确爬取相似的路由URL,它将不会尝试生成动态路由。

主页链接使用"/events/slug"而不是href="events/slug",开发人员站点将在主页链接上正确提供404,并在事件页面上提供动态信息。但是,在构建过程中,这些子弹根本不会生成。

答案 2 :(得分:0)

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

// TransitionWrapper.svelte
...
let show = true;

onMount(() => {
    show = false;
    show = true;
});
...

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