关于javascript:nodejs交互工具库-leven-lru-cache和portfinder

38次阅读

共计 4272 个字符,预计需要花费 11 分钟才能阅读完成。

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 主动寻找 800065535 内可用端口号

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

主动寻找 800065535 内可用端口号

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

正文完
 0