nodejs交互工具库 -- leven, lru cache和portfinder

炸鸡超人

nodejs交互工具库系列

作用
chalk-pipe使用更简单的样式字符串创建粉笔样式方案
chalk正确处理终端字符串样式
Commander.js完整的 node.js 命令行解决方案
Inquirer.js一组通用的交互式命令行用户界面。
slash系统路径符处理
minimist解析参数选项
dotenv将环境变量从 .env文件加载到process.env中
dotenv-expand扩展计算机上已经存在的环境变量
hash-sum非常快的唯一哈希生成器
deepmerge深度合并两个或多个对象的可枚举属性。
yaml-front-matter解析yaml或json
resolve实现node的 require.resolve()算法,这样就可以异步和同步地使用require.resolve()代表文件
semvernpm的语义版本器
leven测量两字符串之间的差异<br/>最快的JS实现之一
lru cache删除最近最少使用的项的缓存对象
portfinder自动寻找 800065535内可用端口号
ora优雅的终端转轮
envinfo生成故障排除软件问题(如操作系统、二进制版本、浏览器、已安装语言等)时所需的通用详细信息的报告
memfs内存文件系统与Node's fs API相同实现
execa针对人类的流程执行
webpack-merge用于连接数组和合并对象,从而创建一个新对象
webpack-chain使用链式API去生成简化webpack版本配置的修改
strip-ansi从字符串中去掉ANSI转义码
address获取当前机器的IP, MAC和DNS服务器。
default-gateway通过对OS路由接口的exec调用获得机器的默认网关
joiJavaScript最强大的模式描述语言和数据验证器。
fs-extra添加了未包含在原生fs模块中的文件系统方法,并向fs方法添加了promise支持
Acorn一个小而快速的JavaScript解析器,完全用JavaScript编写。
zlib.jsZLIB.js是ZLIB(RFC1950), DEFLATE(RFC1951), GZIP(RFC1952)和PKZIP在JavaScript实现。

nodejs交互工具库 -- chalk-pipe和chalk

nodejs交互工具库 -- commander和Inquirer

nodejs交互工具库 -- slash, minimist和dotenv, dotenv-expand

nodejs交互工具库 -- hash-sum, deepmerge和yaml-front-matter

nodejs交互工具库 -- resolve和semver

nodejs交互工具库 -- leven, lru cache和portfinder

nodejs交互工具库 -- ora和envinfo

nodejs交互工具库 -- memfs和execa

nodejs交互工具库 -- webpack-merge和webpack-chain

nodejs交互工具库 -- strip-ansi, address, default-gateway和joi

nodejs交互工具库 -- fs-extra, Acorn和zlib

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

阅读 1.4k

原QDFuns关闭,只能换个社区重新出发,愿各自安好.

473 声望
39 粉丝
0 条评论
你知道吗?

原QDFuns关闭,只能换个社区重新出发,愿各自安好.

473 声望
39 粉丝
宣传栏