凯雷德

极小的(183B到210B)和 快 提升父目录的实用程序
与 凯雷德,您可以扩展父目录,直到找到要查找的内容。
给定一个输入文件或目录, escalade 将继续执行你的回调函数,直到:
- 回调函数返回一个真值
escalade已到达系统根目录(例如,/)
重要:
请注意escalade只处理直系祖先-它不会潜入父母的兄弟姐妹目录。
注意: 从v3.1.0开始, escalade 现在包括 Deno支持! 请参阅 Deno用法 在下面。
安装
$ npm install --save escalade
模式
的“版本”有两个 escalade 可用:
“异步”
这是主/默认模式。它利用了 async/await 和 util.promisify。
“同步”
这是选择加入模式,非常适合以下场景 async 不支持使用。
用法
示例结构
/Users/lukeed
└── oss
├── license
└── escalade
├── package.json
└── test
└── fixtures
├── index.js
└── foobar
└── demo.js
示例使用
//~> demo.js
import { join } from 'path';
import escalade from 'escalade';
const input = join(__dirname, 'demo.js');
// or: const input = __dirname;
const pkg = await escalade(input, (dir, names) => {
console.log('~> dir:', dir);
console.log('~> names:', names);
console.log('---');
if (names.includes('package.json')) {
// will be resolved into absolute
return 'package.json';
}
});
//~> dir: /Users/lukeed/oss/escalade/test/fixtures/foobar
//~> names: ['demo.js']
//---
//~> dir: /Users/lukeed/oss/escalade/test/fixtures
//~> names: ['index.js', 'foobar']
//---
//~> dir: /Users/lukeed/oss/escalade/test
//~> names: ['fixtures']
//---
//~> dir: /Users/lukeed/oss/escalade
//~> names: ['package.json', 'test']
//---
console.log(pkg);
//=> /Users/lukeed/oss/escalade/package.json
// Now search for "missing123.txt"
// (Assume it doesn't exist anywhere!)
const missing = await escalade(input, (dir, names) => {
console.log('~> dir:', dir);
return names.includes('missing123.txt') && 'missing123.txt';
});
//~> dir: /Users/lukeed/oss/escalade/test/fixtures/foobar
//~> dir: /Users/lukeed/oss/escalade/test/fixtures
//~> dir: /Users/lukeed/oss/escalade/test
//~> dir: /Users/lukeed/oss/escalade
//~> dir: /Users/lukeed/oss
//~> dir: /Users/lukeed
//~> dir: /Users
//~> dir: /
console.log(missing);
//=> undefined
注意: 要以“sync”模式运行上面的示例,请从
escalade/sync然后去掉await关键字。
API
攀登(输入、回调)
返回: string|void 或 Promise<string|void>
当你的 callback 定位文件, escalade 将解析/返回一个绝对路径。
如果你的 callback 他从来都不满足,是吗 escalade 将解析/返回一无所获(未定义)。
重要:
这个sync和async版本共享相同的API。
这个 只有 区别在于sync不是基于承诺的。
输入
类型: string
开始上升的路径。
这可能是一个文件或目录路径。
然而,当 input 是一个文件, escalade 将从其父目录开始。
重要: 除非给定绝对路径,
input将从process.cwd()的位置。
回调
类型: Function
为每个祖先级别执行的回调。它总是有两个参数:
dir-当前父目录的绝对路径names-名单(string[])的内容 相对于 这个dir家长
注意: 这个
names列表可以包含文件名 和 目录。
当你的回调返回 美甲师 值,然后 escalade 将继续 dir使用新的参数值重新调用回调。
当你的回调返回一个字符串,那么 escalade 立即停止迭代。
如果字符串是绝对路径,则保持原样。否则,字符串将被解析为绝对路径 从 这个 dir 这包含了令人满意的条件。
重要: 你的
callback可以是Promise/AsyncFunction的“async”版本时escalade。
基准
运行在Node.js v10.13.0上
# Load Time
find-up 3.891ms
escalade 0.485ms
escalade/sync 0.309ms
# Levels: 6 (target = "foo.txt"):
find-up x 24,856 ops/sec ±6.46% (55 runs sampled)
escalade x 73,084 ops/sec ±4.23% (73 runs sampled)
find-up.sync x 3,663 ops/sec ±1.12% (83 runs sampled)
escalade/sync x 9,360 ops/sec ±0.62% (88 runs sampled)
# Levels: 12 (target = "package.json"):
find-up x 29,300 ops/sec ±10.68% (70 runs sampled)
escalade x 73,685 ops/sec ± 5.66% (66 runs sampled)
find-up.sync x 1,707 ops/sec ± 0.58% (91 runs sampled)
escalade/sync x 4,667 ops/sec ± 0.68% (94 runs sampled)
# Levels: 18 (target = "missing123.txt"):
find-up x 21,818 ops/sec ±17.37% (14 runs sampled)
escalade x 67,101 ops/sec ±21.60% (20 runs sampled)
find-up.sync x 1,037 ops/sec ± 2.86% (88 runs sampled)
escalade/sync x 1,248 ops/sec ± 0.50% (93 runs sampled)
Deno
从v3.1.0开始, escalade 可以在Deno注册表中找到。
// Choose "async" mode
import escalade from 'https://deno.land/escalade/async.ts';
// Choose "sync" mode
import escalade from 'https://deno.land/escalade/sync.ts';
重要: 这个
allow-read需要许可!
相关
- premove -一个小的(247B)实用程序,递归地删除项目
- totalist -一个很小的(195B到224B)实用程序,递归列出目录中的所有(总数)文件
- mk-dirs -一个很小的(420B)实用程序,用于递归地创建目录及其父目录
许可证
麻省理工学院© 卢克·爱德华兹