对于Next.js,是否可以为使用动态路由的每个页面设置多个条目?

r3i60tvu  于 2023-08-04  发布在  其他
关注(0)|答案(1)|浏览(115)

我为Next.js设置了动态路由。文件夹结构是[lan]/[... slug].tsx,我知道在Webpack中我们可以为每个页面设置多个条目。在Next.js中,我们还可以使用以下内容自定义Webpack设置:

module.exports = {
  webpack (config) {
    return merge(config, {
      entry () {
        return config.entry().then((entry) => {
          return Object.assign({}, entry, { myentry: './test'
          })
        })
      }
    }
  }
}

字符串
我很好奇如何设置Webpack,使每个页面都成为一个入口点,并将slug作为chucnk ID名称,因为我在这里使用动态路由。
我尝试一个接一个地添加入口点。是的,它可以工作。我想弄清楚如何通过动态路线实现这一目标。
或者可以一页一页地导出所有资源吗?我的意思是,我希望导出的输出像下面的文件夹结构:
例如,对于URL /en/blog/life-blog,我希望所有静态文件都导出到 *en-blog-life-blog文件夹 *,这样每个页面都可以有自己的静态HTML内容。

kx1ctssn

kx1ctssn1#

在Next.js中,您可以为使用动态路由的每个页面安排多个入口点。但是,需要注意的是,Next.js抽象了webpack配置,以提供更简单、更精简的开发体验。要实现所需的行为,您需要自定义webpack配置。
要使用动态路由为每个页面创建单独的入口点,并使用slug作为块ID名称,您可以执行以下步骤:
1.在Next.js项目中安装@next/webpack-contrib包:

npm install @next/webpack-contrib --save-dev

字符串
1.如果尚未在项目的根目录下创建next.config.js文件,请执行此操作。
1.在next.config.js中,导入所需的包:

const { withMultipleEntry } = require('@next/webpack-contrib');


1.使用withMultipleEntry定义自定义配置。在入口配置中,可以通过name变量访问页面路径:

module.exports = withMultipleEntry({
  // Your Next.js config options can go here
  webpack(config, { isServer }) {
    // You can customize other parts of the webpack config here if needed
    config = {
      ...config,
      // Your other webpack configuration options
    };

    // Append custom entry points for dynamic pages
    if (!isServer) {
      config.entry = async () => {
        const entry = await config.entry();
        const dynamicPages = [
          'en/blog/life-blog',
          // Add other dynamic pages as needed
        ];

        // Generate an entry for each dynamic page using the slug as chunk name
        for (const slug of dynamicPages) {
          entry[`pages/${slug}`] = `./pages/${slug}.tsx`;
        }

        return entry;
      };
    }

    return config;
  },
});


通过这种设置,每个动态页面都有自己的入口点,slug将用作块ID名称。
关于为每个页面单独导出所有资源,Next.js在构建过程中为每个页面自动生成静态HTML文件。默认情况下,输出目录将是/out,但您可以通过在Next.js配置中设置outDir选项来更改它。
下面是一个示例,说明如何修改输出目录,使每个页面都有单独的文件夹:

module.exports = {
  // Your other Next.js config options
  outDir: 'out/[path]',
};


使用此配置,每个页面都将在out目录中拥有自己的文件夹,该页面的所有静态HTML文件和资源都将包含在该文件夹中。outDir选项中的[path]标记将替换为页面的URL路径。

相关问题