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
会导致它挂起。
这可以很容易地为任何目录重新创建,例如
mkdir -p temp/{public,private}
chmod -r temp/private
- 将
"/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 模式,如果性能是那个至关重要。
我正在尝试使用 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
会导致它挂起。
这可以很容易地为任何目录重新创建,例如
mkdir -p temp/{public,private}
chmod -r temp/private
- 将
"/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 模式,如果性能是那个至关重要。