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()代表文件 |
semver | npm的语义版本器 |
leven | 测量两字符串之间的差异 最快的JS实现之一 |
lru cache | 删除最近最少使用的项的缓存对象 |
portfinder | 自动寻找 8000 至65535 内可用端口号 |
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调用获得机器的默认网关 |
joi | JavaScript最强大的模式描述语言和数据验证器。 |
fs-extra | 添加了未包含在原生fs 模块中的文件系统方法,并向fs 方法添加了promise支持 |
Acorn | 一个小而快速的JavaScript解析器,完全用JavaScript编写。 |
zlib.js | ZLIB.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交互工具库 -- leven, lru cache和portfinder
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
参考
基本常用的方法场景就这些了,更完整的用法可以直接查阅文档
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()
手动遍历整个缓存,主动删除旧条目
参考
基本常用的方法场景就这些了,更完整的用法可以直接查阅文档
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);
参考
基本常用的方法场景就这些了,更完整的用法可以直接查阅文档