Next.js文件系统路由如何禁用指定路径 无需自定义server.js
Next.js 9.1.2 忽略指定路径生成路由的无自定义server解决方案
以下方案均不需要依赖自定义server.js,且会在构建阶段直接排除目标路径,不会生成多余路由:
方案1:重命名目录(零配置,最推荐)
Next.js 文件系统路由默认会自动忽略名称以下划线_开头的目录/文件,不会为其生成路由。你只需要将partials目录重命名为_partials即可:
比如原路径/pages/import/partials改为/pages/import/_partials,该目录下的所有代码拆分模块都不会被生成路由,同时你仍然可以正常在同级的主页面文件中导入这些模块。
方案2:将非页面组件移出pages目录
pages目录仅存放需要生成路由的页面入口文件,所有拆分的业务模块、组件都可以放在根目录下的components、utils等自定义目录中,比如可以建立/components/import/partials/路径存放对应页面的拆分模块,天然不会触发路由生成逻辑。
方案3:通过next.config.js配置忽略指定目录(无需改目录名)
如果必须保留partials的目录名,可以修改项目根目录的next.config.js配置,调整页面loader的排除规则:
// next.config.js module.exports = { webpack(config) { config.module.rules.forEach(rule => { // 匹配Next.js内部处理页面路由的loader规则 if (rule.loader && rule.loader.includes('next/dist/pages-loader')) { rule.exclude = rule.exclude || [] // 忽略所有路径中包含/partials/的文件 rule.exclude.push(/\/partials\//) } }) return config } }
配置完成后重启项目即可生效。
方案4:通过pageExtensions配置标记路由文件
如果你希望更灵活的控制哪些文件被识别为路由页面,可以给所有需要生成路由的页面文件增加统一后缀,比如*.page.js,然后在next.config.js中配置:
// next.config.js module.exports = { pageExtensions: ['page.js'] }
之后只有后缀为.page.js的文件会被识别为路由页面,partials目录下的普通.js模块不会生成路由。
内容的提问来源于stack exchange,提问作者jjspierx
相关产品推荐
相关产品推荐

