Node.js fast-glob EACCES:权限被拒绝

Node.js fast-glob EACCES: permission denied

我正在尝试使用 fast-glob 获取目录列表,但是如果用户缺乏读取权限,目录数量未知,因此 fast-glob 最终抛出 EACCES 然后挂起.提升用户的权限或降低 glob 匹配的权限不是一个选项,因为这将在 VS 代码扩展中。

import * as fg from 'fast-glob';
const globIncPaths: string[] = fg.sync(["/usr/lib/**"], {
      onlyDirectories: true,
      suppressErrors: true, // set this to false to raise a EACCES exception
    });

在我的例子中 /usr/lib/ssl/private 会导致它挂起。

这可以很容易地为任何目录重新创建,例如

  1. mkdir -p temp/{public,private}
  2. chmod -r temp/private
  3. "/usr/lib/**" 从 MWE 更改为 "your/cwd/temp/**"

有没有办法抑制错误并继续进行 glob 搜索,只排除我没有足够权限的任何匹配项?我是否漏掉了一些明显的东西?

也欢迎 fast-glob 的替代品,只要它们不是可怕的 slow/inefficient。

所以我找到的唯一合理的解决方案是使用 glob 并将 strict 设置为 false

import { glob } from 'glob';
const globIncPaths: string[] = [];
for (const i of resIncludePaths) {
  // use '/' to match only directories and not files
  globIncPaths.push(...glob.sync(i + '/', { strict: false }));
}

大型匹配的性能存在差异,但需要进行优化,例如 运行 glob 仅针对 fast-glob 失败的 glob 模式,如果性能是那个至关重要。