You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 07:01:03