为何glob-promise返回空字符串数组?TypeScript项目求助
问题排查与解决方案
可能的原因及对应解决方法
1. 路径层级冗余(最可能)
你当前代码中用path.dirname(__dirname)获取上级目录,再拼接glob-test可能多了一层不必要的路径。假设你的项目目录结构是:
glob-test/ package.json globby.ts folder-area/ joke.txt
__dirname本身就指向glob-test目录,path.dirname(__dirname)会跳到它的上级目录,再拼接glob-test生成的路径虽然文件系统中存在,但glob对这类跨层级绝对路径的匹配逻辑可能出现异常,导致返回空数组。
解决方法:直接基于当前文件目录拼接目标路径:
import * as path from 'path'; import glob from 'glob-promise'; // 直接从当前项目根目录(glob-test)拼接目标路径 const txtURL = path.resolve(__dirname, 'folder-area', '*.txt'); glob(txtURL).then(function (cnt) { console.log('Path: ' + txtURL); console.log('Content: ', cnt); });
2. Windows路径分隔符与glob语法冲突
如果是Windows环境,path.resolve生成的路径用反斜杠\作为分隔符,但glob默认会把反斜杠识别为转义符,导致*.txt中的*失去通配符作用,匹配不到文件。
解决方法1:替换路径分隔符
把反斜杠替换成glob兼容的正斜杠:
import * as path from 'path'; import glob from 'glob-promise'; const dir = path.dirname(__dirname); const txtPath = path.resolve(dir, 'glob-test', 'folder-area', '*.txt'); // 替换反斜杠为正斜杠 const globPattern = txtPath.replace(/\\/g, '/'); glob(globPattern).then(cnt => { console.log('Path: ' + globPattern); console.log('Content: ', cnt); });
解决方法2:启用glob的Windows兼容选项
通过配置让glob不把反斜杠视为转义符:
import * as path from 'path'; import glob from 'glob-promise'; const dir = path.dirname(__dirname); const txtURL = path.resolve(dir, 'glob-test', 'folder-area', '*.txt'); // 开启Windows路径兼容模式 glob(txtURL, { windowsPathsNoEscape: true }).then(cnt => { console.log('Path: ' + txtURL); console.log('Content: ', cnt); });
3. 验证路径有效性
可以在代码中打印路径具体值,手动检查文件管理器中该路径下是否存在joke.txt,避免因目录/文件名拼写错误导致匹配失败:
console.log('上级目录:', dir); console.log('目标匹配路径:', txtURL);
内容的提问来源于stack exchange,提问作者Red
相关产品推荐
相关产品推荐

