无法使用工兵导出生成动态路由



>我有一个动态路由:

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 问题

相关内容

  • 没有找到相关文章

最新更新