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