glob.sync(path.join(__dirname, 'src', 'module', '*', 'controller', '*Controller.js'));
glob.sync(__dirname + '/src/module/*/controller/*Controller.js');
在windows环境下 上述两行代码 第一行输出结果为[] 第二行代码找到要匹配的文件了。
这是为什么呢?
这是因为 path.join
会根据操作系统返回适当的路径分隔符。在 UNIX-like 系统(如 Linux 和 macOS)上,它会返回正斜杠 (/
),而在 Windows 上,它会返回反斜杠 (\
)。
glob
库的匹配模式期望使用正斜杠 (/
),即使在 Windows 上也是如此。所以当你在 Windows 上使用 path.join
时,由于它返回了反斜杠 (\
),这可能导致不匹配。
将代码修改成这样
let pattern = path.join(__dirname, 'src', 'module', '*', 'controller', '*Controller.js');
pattern = pattern.replace(/\\/g, '/'); // 将反斜杠替换为正斜杠
let files = glob.sync(pattern);
这样glob 就能在任何系统
正常工作