如何使用动态路由在页面中触发相同的.js?

How to use Dynamic Routing to trigger the same .js in pages?

我有多条路线,例如:

  1. /解决方案/
  2. /solutions/web-development/
  3. /功能/
  4. /features/flexbox/
  5. /插件/
  6. /plugins/permalink/

等等。

我想 运行 所有这些路线的同一个文件 (abc.js)。我检查了 Next.js 的 Dynamic Routing 部分,但根据该部分,我的理解是我需要创建多个目录并在多个实例上复制相同的文件。

有什么方法可以 运行 所有 DEFINED 路由或整个站点的单个文件?

编辑: 我知道有一种方法可以通过创建 Custom Server and manually add dynamic routes BUT 我希望实现这无需创建外部服务器。

我找到了解决这个问题的方法。这可以使用 next.config.js 文件来完成。您唯一需要的是 URLs 页面,然后您可以应用相同的文件,甚至添加条件以使用多个文件进行应用。

示例代码如下:

module.exports = {
  exportPathMap: async function(
    defaultPathMap,
    { dev, dir, outDir, distDir, buildId }
  ) {
    const paths = {};
    const pageURLs = [
      '/solutions/',
      '/solutions/web-development/',
      '/features/',
      '/features/flexbox/',
      '/plugins/',
      '/plugins/permalink/'
    ];

    var loopInit = 0;
    var loopCount = pageURLs.length;
    var url = '';
    for (loopInit = 0; loopInit < loopCount; loopInit += 1) {
      url = pageURLs[loopInit];
      switch(url) {
        case '/solutions/':
          paths[`${url}`] = {
            page: '/solutions',
            query: {
              slug: url
            }
          };
          break;
        case '/features/':
          paths[`${url}`] = {
            page: '/features',
            query: {
              slug: url
            }
          };
          break;
        default:
          paths[`${url}`] = {
            page: '/',
            query: {
              slug: url
            }
          };
          break;
      }
    }

    return paths;
  },
  exportTrailingSlash: true
};

在上面的示例中,我在 pageURLs 变量中硬编码了 URLs。您可以在其中传递动态值,例如从 WordPress、URL 从 Drupal 或任何其他 获取永久链接CMSHeadless CMS

在转换案例中,我在 /solutions//features/ 上应用了不同的模板。对于剩余的 URL,我正在应用一个模板。

注意: page: '/' 引用 pages 目录下的 index.js 同样, page: '/solutions' 引用 solutions.js pages目录下等等。根据开发者的选择,它可以是 changed/vary。

我已经在 Next.js9.1.4 版本上测试了这个解决方案。请参阅 Next.js 文档以获取更多详细信息。

  1. https://nextjs.org/docs#custom-configuration
  2. https://nextjs.org/docs#usage

已编辑: 此解决方案适用于服务器端呈现和 Next.js 导出。