代码之家  ›  专栏  ›  技术社区  ›  Nighon

如何在Next.js应用程序中为route[slug]生成.html文件?

  •  0
  • Nighon  · 技术社区  · 2 年前

    我有一个Next.js(版本13.4.5)应用程序,它有一个动态路线 /blog/[slug] 。我希望将该应用程序导出为静态网站。以下是目录结构:

    /app
      /blog
        /[slug]
          page.jsx
        page.jsx
      layout.jsx
      globals.css
      ...
    

    和的内容 next.config.js :

    const nextConfig = {
      output: 'export',
      trailingSlash: true,
    }
    
    module.exports = nextConfig
    

    运行命令后 npm run build ,中生成的文件 /out 目录如下:

    /out
      /.next
      /404
      /blog
        index.html
        index.txt
      404.html
      index.html
      index.txt
      ...
    

    没有为路线生成.html文件 /博客/[slug] ,与 official document :

    当运行下一个构建时,next.js会将静态导出生成到out文件夹中。不再需要使用下一个导出。例如,假设您有以下路线:

    /

    /博客/[id]

    运行下一个版本后,next.js将生成以下文件:

    /out/index.html

    /out/404.html

    /out/blog/poster1.html

    /out/blog/poster.html

    在以前的版本中,我可以使用 getStaticPaths getStaticProps 以预渲染页面。但这些方法在带有新应用路由器的新版本中不受支持。

    如何在新版本(“next”:“13.4.5”,)中为路由生成.html文件 /博客/[slug] ?

    1 回复  |  直到 2 年前
        1
  •  3
  •   Yilmaz    2 年前

    你需要使用 generate-static-params

    // Return a list of `params` to populate the [slug] dynamic segment
    export async function generateStaticParams() {
      const posts = await fetch('https://.../posts').then((res) => res.json())
     
      return posts.map((post) => ({
        slug: post.slug,
      }))
    }
     
    // Multiple versions of this page will be statically generated
    // using the `params` returned by `generateStaticParams`
    export default function Page({ params }) {
      const { slug } = params
      // ...
    }