当前位置: 首页 > 知识库问答 >
问题:

从markdown文件夹生成next.js静态页面

宇文飞羽
2023-03-14

我已经构建了一个静态的next.js站点,并希望从一个标记文档文件夹中生成一组静态页面(但这个问题的目的可能是任何东西--文本文件等)。假设我有这个文档文件夹:

/docs/foo/bar.md
/docs/foo/baz.md
/docs/bar/foo.md
...
/docs/foobar.md

发现完整URL slug的唯一方法是在构建时,在构建时可以递归文档文件夹并发现以下路径:

/docs/foo/bar
/docs/foo/baz
/docs/bar/foo
...
/docs/foobar

通常情况下,如果我知道diff子路由,我可以像这样添加文件:

pages/docs/foo/[page].js
pages/docs/bar/[page].js

...然而,我不知道这些子文件夹在代码时能够做到这一点,只有在构建时当我递归文档。

我能找到的最接近的东西是一条包罗万象的路线,像这样:

pages/docs/[...slug].js

我知道我可以很容易地在应用程序中链接到诸如/docs/foo/bar之类的路由,并且我知道我可以像本例中那样在页面本身中获得slug,但是我不确定是否/如何使用GetStaticPathsGetStaticProps在这个文件中生成我需要的静态路径?

非常感谢任何帮助!

共有1个答案

平学
2023-03-14

我刚才设法解决了一个对我来说并不明显的问题...

getStaticPaths中,由于[...slug].js,next.js期望提供的slug是路径部分的数组,因此构建数组的数组解决了这个问题:

export async function getStaticPaths() {
  // Load the docs from the file system and convert their relative docs paths to arrays
  const docs = [["foo", "bar"], ["foo", "baz"], ["bar", "foo"], ["foobar"]];

  return {
    paths: docs.map((doc) => {
      return {
        params: {
          slug: doc,
        },
      };
    }),
    fallback: false,
  };
}

...然后将根据上面的数组调用getStaticProps,我可以检索标记并准备内容作为page组件的道具。

 类似资料:
  • 我正在一个Next.js项目中开发一个多语言静态登陆页面。我的目标是拥有以下结构: /->英文主页 /de->德文主页 /it->意大利语主页 我正在以以下方式构建它: pages/index.js 页数/de.js 为了使网站可以访问,我想相应地设置html lang。 pages/_document.js 如何指定每页的语言?我尝试使用,但这迫使我的网站必须是SSR。

  • 静态网页生成器工具 JS 网页生成器: Metalsmith harp JS 博客网站生成器: hubpress.io Hexo.io 网站生成器列表: staticsitegenerators.net www.staticgen.com

  • 静态网页生成器 静态网页生成器, 是使用服务器端代码编写(如: ruby, php, python, nodeJS 等...), 用静态文本数据 + 模板, 生成从服务器发送到客户端的静态 HTML 文件. 综合学习: 静态网页生成器 [read]

  • 本文向大家介绍ASP.NET静态页生成方法,包括了ASP.NET静态页生成方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了ASP.NET静态页生成方法。分享给大家供大家参考。具体实现方法如下: 一、问题: 由于业务需要,得把页面按照模板页生成静态页面,所以自己就琢磨了下,写些思路,以备日后需要的时候用。 二、解决方法: 静态页生成用到最多的就是匹配跟替换了,首先得读取模板页的html内

  • 本文向大家介绍PHP静态文件生成类实例,包括了PHP静态文件生成类实例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了PHP静态文件生成类。分享给大家供大家参考。 具体实现代码如下: 具体用法如下: 希望本文所述对大家的PHP程序设计有所帮助。

  • 试图从我的构建中提取文件夹,但以下操作不起作用: 有什么想法吗?