nodejs 交互工具库系列
库 | 作用 |
---|---|
chalk-pipe | 应用更简略的款式字符串创立粉笔款式计划 |
chalk | 正确处理终端字符串款式 |
Commander.js | 残缺的 node.js 命令行解决方案 |
Inquirer.js | 一组通用的交互式命令行用户界面。 |
slash | 零碎门路符解决 |
minimist | 解析参数选项 |
dotenv | 将环境变量从 .env 文件加载到 process.env 中 |
hash-sum | 十分快的惟一哈希生成器 |
deepmerge | 深度合并两个或多个对象的可枚举属性。 |
yaml-front-matter | 解析 yaml 或 json |
resolve | 实现 node 的 require.resolve() 算法,这样就能够异步和同步地应用 require.resolve()代表文件 |
semver | npm 的语义版本器 |
leven | 测量两字符串之间的差别 <br/> 最快的 JS 实现之一 |
lru cache | 删除最近起码应用的项的缓存对象 |
portfinder | 主动寻找 8000 至 65535 内可用端口号 |
nodejs 交互工具库 — chalk-pipe 和 chalk
nodejs 交互工具库 — commander 和 Inquirer
nodejs 交互工具库 — slash, minimist 和 dotenv
nodejs 交互工具库 — hash-sum, deepmerge 和 yaml-front-matter
nodejs 交互工具库 — resolve 和 semver
nodejs 交互工具库 — leven, lru cache 和 portfinder
leven
测量两字符串之间的差别
最快的 JS 实现之一 Levenshtein distance 算法
Install
yarn add leven
Usage
const leven = require('leven');
leven('cat', 'cow');
//=> 2
例子
const leven = require('leven');
const ary = [['12345', '23456'],
['123', '456'],
['abc', 'cba'],
['因為我是中國人所以我會說中文', '因為我是英國人所以我會說英文'],
]
ary.forEach(item => console.log(leven(item[0], item[1])))
// 2
// 3
// 2
// 2
参考
根本罕用的办法场景就这些了, 更残缺的用法能够间接查阅文档
leven
lru cache
删除最近起码应用的项的缓存对象。
Installation:
npm install lru-cache --save
Usage:
var LRU = require("lru-cache")
, options = { max: 500
, length: function (n, key) {return n * 2 + key.length}
, dispose: function (key, n) {n.close() }
, maxAge: 1000 * 60 * 60 }
, cache = new LRU(options)
, otherCache = new LRU(50) // sets just the max size
cache.set("key", "value")
cache.get("key") // "value"
// non-string keys ARE fully supported
// but note that it must be THE SAME object, not
// just a JSON-equivalent object.
var someObject = {a: 1}
cache.set(someObject, 'a value')
// Object keys are not toString()-ed
cache.set('[object Object]', 'a different value')
assert.equal(cache.get(someObject), 'a value')
// A similar object with same keys/values won't work,
// because it's a different object identity
assert.equal(cache.get({ a: 1}), undefined)
cache.reset() // empty the cache
如果你往里面放更多的货色,那么我的项目就会归队。
如果你想把一个超大的货色放进去,它会马上掉进去
Options
max
缓存的最大大小,通过对缓存中的所有值利用长度函数来查看。不设置这个有点傻,因为这就是这个库的目标,但它默认为无穷大。将其设置为非数字或正数将抛出类型谬误。设它为 0,它就是无穷。maxAge
最大寿命(毫秒), 我的项目的最大期限不会随着工夫的增长而主动删除,然而如果你想要一个太旧的我的项目,它会删除它并返回未定义的,而不是给你。设置为负值会让所有货色看起来都很旧! 将其设置为非数字将抛出类型谬误。length
函数,用于计算存储项的长度。如果你在存储字符串或缓冲区,那么你可能须要做一些相似function(n, key){return n.length}
的事件. 默认为function(){return 1}
, 如果你想存储最大 like-sized 的货色,这是能够的。我的项目作为第一个参数传递,而键作为第二个参数传递。dispose
函数,在从缓存中删除项时对项调用。如果您想要敞开文件描述符或在我的项目不再可拜访时执行其余清理工作,这将十分不便. 应用key, value
调用. 它在理论从外部缓存中移除项之前被调用,所以如果你想立刻把它放回去,你必须在nextTick
或者setTimeout
回调这么做, 否则它不会做任何事件stale
默认状况下,如果您设置了maxAge
,它实际上只会在您get(key)
时从缓存中提取贮存的项. (也就是说,它没有事后执行setTimeout
或其余操作.) 如果你设置stale:true
, 它将在删除之前返回过期值。如果您没有设置此设置,那么当您尝试获取一个过期条目时,它将返回undefined
,就如同它曾经被删除了一样。noDisposeOnSet
默认状况下,如果你设置dispose()
办法, 而后它会被调用set()
操作笼罩现有 key. 如果您设置此选项,dispose()
只在 key 从缓存中退出时调用,而不是在 key 被笼罩时调用updateAgeOnGet
当应用有maxAge
的条目时 , 设置这个true
将使每个项的无效工夫在从缓存中检索时更新为以后工夫,从而使其不过期。(当然,因为应用的频率不同,缓存依然会生效.)
API
set(key, value, maxAge)
get(key) => value
这两种办法都将更新密钥的“最近应用”状态。他们做你想做的事.
maxAge
是可选的和笼罩缓存maxAge
选项, 如果提供.如果没有找到 key,
get()
会返回undefined
.key 和 val 能够是任何值。
peek(key)
返回键值 (或
undefined
如果没有找到) 不更新“最近应用”的要害。(如果您发现自己常常应用这种办法,那么您可能应用了谬误的数据结构类型,但在某些状况下它还是很不便的。)
del(key)
从缓存中删除一个 key
reset()
齐全革除缓存,抛弃所有值。
has(key)
查看键是否在缓存中,而不更新其最近性或删除其过期。
forEach(function(value,key,cache), [thisp])
正如
Array.prototype.forEach
. 按最近的程序遍历缓存中的所有键。(也就是说,先迭代最近应用过的条目。)rforEach(function(value,key,cache), [thisp])
与
cache.forEach(...)
统一然而我的项目是按相同的程序迭代的. (例如,最近应用的我的项目首先迭代.)keys()
返回缓存中键的数组。
values()
返回缓存中值的数组。
length
思考长度选项函数,返回缓存中对象的总长度。
itemCount
返回以后缓存中对象的总数。留神,
stale
(参见选项)项将作为此项计数的一部分返回。dump()
返回筹备序列化和应用的缓存项的数组
destinationCache.load(arr)
.load(cacheEntriesArray)
用
sourceCache.dump()
加载另一个缓存项数组, 缓存在加载新条目之前重置指标缓存prune()
手动遍历整个缓存,被动删除旧条目
参考
根本罕用的办法场景就这些了, 更残缺的用法能够间接查阅文档
node-lru-cache
portfinder
主动寻找 8000
至 65535
内可用端口号
Installation
yarn add portfinder
Usage
portfinder
模块具备简略的接口:
var portfinder = require('portfinder');
portfinder.getPort(function (err, port) {
//
// `port` is guaranteed to be a free port
// in this scope.
//
});
或者应用 promise (如果反对的话) :
const portfinder = require('portfinder');
portfinder.getPortPromise()
.then((port) => {
//
// `port` is guaranteed to be a free port
// in this scope.
//
})
.catch((err) => {
//
// Could not get a free port, `err` contains the reason.
//
});
如果 portfinder.getPortPromise()
在不反对 promise 的 node 版本上调用 (<4), 它会抛出一个谬误除非 Bluebird 或者任何 Promise pollyfill 应用了
Ports search scope
默认 portfinder
将从 8000
开始搜寻 a 并扫描直到最大端口号(65535
)
你能够通过设置来扭转全局:
portfinder.basePort = 3000; // default: 8000
portfinder.highestPort = 3333; // default: 65535
或通过传递可选的选项对象在每次调用:
portfinder.getPort({
port: 3000, // minimum port
stopPort: 3333 // maximum port
}, callback);
参考
根本罕用的办法场景就这些了, 更残缺的用法能够间接查阅文档
node-portfinder