Next.js中glob包sync函数无法正常工作求助
解决Next.js中glob sync无法匹配.md文件的问题
可能的原因及修复方案
1. 路径分隔符不兼容
Windows系统下路径使用反斜杠\,但glob默认以正斜杠/作为路径分隔符,直接拼接的路径会导致匹配失败。可以将路径转为glob兼容格式:
const mdxInDir = sync(`${blogDirPath.replace(/\\/g, '/')}/*.md`);
2. 确认glob包已正确安装
如果未安装glob,先执行安装命令:
npm install glob # 或 yarn add glob
3. 使用cwd参数简化匹配逻辑
避免路径拼接的格式问题,直接通过cwd参数指定扫描目录,匹配模式更简洁:
const mdxInDir = sync('*.md', { cwd: blogDirPath });
4. 验证目标目录路径正确性
在getStaticProps中打印路径,确认其指向包含.md文件的目录:
console.log('目标目录路径:', blogDirPath);
注意process.cwd()在Next.js中指向项目根目录,确保blogData目录确实在根目录下,而非pages等子目录内。
5. 排查文件忽略规则
如果blogData目录被.gitignore或Next.js的忽略配置排除,会导致glob无法扫描到文件,可检查相关配置文件。
修复后的示例代码
import path from 'path' import { sync } from 'glob' const Index=({mdxInDir})=>{ console.log(mdxInDir) return <></> } export default Index export async function getStaticProps(){ const blogDirPath = path.join(process.cwd(), 'blogData') const mdxInDir = sync('*.md', { cwd: blogDirPath }) console.log('目标目录:', blogDirPath) console.log('匹配到的文件:', mdxInDir) return { props : { mdxInDir, blogDirPath } } }
内容的提问来源于stack exchange,提问作者Silenx
相关产品推荐
相关产品推荐

