库 | 做用 |
---|---|
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 | 测量两字符串之间的差别<br/>最快的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和chalkhtml
nodejs交互工具库 -- commander和Inquirernode
nodejs交互工具库 -- slash, minimist和dotenv, dotenv-expandwebpack
nodejs交互工具库 -- hash-sum, deepmerge和yaml-front-mattergit
nodejs交互工具库 -- resolve和semvergithub
nodejs交互工具库 -- leven, lru cache和portfinderweb
nodejs交互工具库 -- webpack-merge和webpack-chainjson
nodejs交互工具库 -- strip-ansi, address, default-gateway和joisegmentfault
nodejs交互工具库 -- fs-extra, Acorn和zlib
测量两字符串之间的差别
最快的JS实现之一 Levenshtein distance 算法
yarn add leven
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
基本经常使用的方法场景就这些了,更完整的用法能够直接查阅文档
删除最近最少使用的项的缓存对象。
npm install lru-cache --save
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
若是你往里面放更多的东西,那么项目就会离队。
若是你想把一个超大的东西放进去,它会立刻掉出来
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
将使每一个项的有效时间在从缓存中检索时更新为当前时间,从而使其不过时。(固然,因为使用的频率不一样,缓存仍然会失效.)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()
手动遍历整个缓存,主动删除旧条目
基本经常使用的方法场景就这些了,更完整的用法能够直接查阅文档
自动寻找 8000
至65535
内可用端口号
yarn add portfinder
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使用了
默认 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);
基本经常使用的方法场景就这些了,更完整的用法能够直接查阅文档