我找到了解决这个问题的方法。这可以使用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 变量中硬编码了 URL。您可以在其中传递动态值,例如从 WordPress 获取永久链接、从 Drupal 或任何其他 CMS 或 Headless CMS等
在 switch 案例中,我在 /solutions/ 和 /features/ 上应用了不同的模板。对于其余的 URL,我将应用一个模板。
注意: page: '/' 指 pages 目录下的index.js 类似,page: '/solutions' 指 pages 目录下的 solutions.js 等等。它可以根据开发人员的选择进行更改/变化。
我已经在 Next.js 的9.1.4 版本上测试了这个解决方案。有关详细信息,请参阅 Next.js 文档。
- https://nextjs.org/docs#custom-configuration
- https://nextjs.org/docs#usage
已编辑:此解决方案适用于服务器端渲染和Next.js 导出。