我有一条动态路线:
routes/artwork/[slug].svelte.
一切都很好npm run dev。
但是当我npm run export缺少那些动态的 slug 路线时。我在 中没有看到它们,__sapper__/export当我上传到 Netlify 时,这些页面也丢失了。
有什么线索我可以解决这个问题吗?我错过了什么明显的东西吗?
sapper export通过构建您的应用程序,运行它,然后访问/并递归访问它找到的每个内部链接来工作。出于这个原因,必须可以通过跟随主页上的链接(例如,通过一个页面,该页面将映射到)来访问/artwork/foo等。/artwork/barroutes/artwork/index.svelte/artwork
为Rich Harris 的回答添加额外的上下文:
如果在动态路由之前爬错了类似的路由 URL,它不会尝试生成动态路由。
主页链接使用"/events/slug"而不是href="events/slug",开发站点将在主页链接上正确提供 404,并在事件页面上提供动态 slug。但是,在构建时,根本不会生成 slug。
正如coldeau在我的案例中提到的那样,问题是我将页面组件包装在一个组件中,该TransitionWrapper组件具有启动并在安装时翻转到。一个简单的解决方法是启动它,然后在安装时翻转它两次:{#if show}falsetruetrue
// 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 问题