我有一条动态路线:
routes/artwork/[slug].svelte
.
一切都很好npm run dev
。
但是当我npm run export
缺少那些动态的 slug 路线时。我在 中没有看到它们,__sapper__/export
当我上传到 Netlify 时,这些页面也丢失了。
有什么线索我可以解决这个问题吗?我错过了什么明显的东西吗?
sapper export
通过构建您的应用程序,运行它,然后访问/
并递归访问它找到的每个内部链接来工作。出于这个原因,必须可以通过跟随主页上的链接(例如,通过一个页面,该页面将映射到)来访问/artwork/foo
等。/artwork/bar
routes/artwork/index.svelte
/artwork
为Rich Harris 的回答添加额外的上下文:
如果在动态路由之前爬错了类似的路由 URL,它不会尝试生成动态路由。
主页链接使用"/events/slug"
而不是href="events/slug"
,开发站点将在主页链接上正确提供 404,并在事件页面上提供动态 slug。但是,在构建时,根本不会生成 slug。
正如coldeau在我的案例中提到的那样,问题是我将页面组件包装在一个组件中,该TransitionWrapper
组件具有启动并在安装时翻转到。一个简单的解决方法是启动它,然后在安装时翻转它两次:{#if show}
false
true
true
// TransitionWrapper.svelte
...
let show = true;
onMount(() => {
show = false;
show = true;
});
...
由于代码是在 onMount 内部执行的,因此根据我运行的测试它可以正常工作
万一有人有这个问题。上面的解决方案并没有真正帮助,因为我有很多嵌套路由,您无法使用该--entries
方法指定这些路由。
但是有效的是404.svelte
在我的routes
文件夹中创建一个文件,然后将其添加到我的package.json
"export": "sapper export --legacy --entry \"/ /404\"",
"postexport": "mv __sapper__/export/404/index.html __sapper__/export/404.html",
此解决方案的来源来自此github 问题