nodejs交互工具库系列库角色chalk-pipe使用更简单的样式字符串创建chalk样式解决方案chalk正确处理终端字符串样式Commander.js完整节点。js命令行解决方案Inquirer.js是一套通用的交互式命令行用户界面。斜杠系统路径字符处理minimist解析参数选项dotenv从加载环境变量。或多个对象的可枚举属性。yaml-front-matter解析yaml或jsonresolve实现node的require.resolve()算法,这样require.resolve()可以异步和同步的方式代表semvernpm的semanticversionerleven测量两个字符串的差异
最快的JS实现之一lru缓存删除最近最少使用的项目缓存对象portfinder自动查找从8000到65535的可用端口号或优雅的终端运行器envinfo生成用于解决软件问题(例如操作系统、二进制版本、浏览器、已安装的语言等)memfs内存文件系统与Node的fsAPI实现相同execa用于人工进程执行webpack-merge用于连接数组和合并对象创建新对象webpack-chain使用chainAPI生成简化的webpack版本配置修改strip-ansi删除ANSIescapecodeaddress从字符串中获取当前机器的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和chalknodejs交互工具库——commander和Inquirer交互工具库--resolve和semvernodejs交互工具库--leven、lrucache和portfindernodejs交互工具库--ora和envinfonodejs交互工具库--memfs和execanodejs交互工具库--webpack-merge和webpack-chainnodejs交互工具库--strip-ansi、address、default-gateway和joinodejs交互工具库--fs-extra、Acorn和zlibleven测量两个字符串之间的差异最快的JS实现之一Levenshtein距离算法InstallyarnaddlevenUsageconstleven=require('leven');leven('cat','cow');//=>2个例子constleven=require('leven');constary=[['12345','23456'],['123','456'],['abc','cba'],['我会说中文因为我是中国人','我会说English因为我是英国人'],]ary.forEach(item=>console.log(leven(item[0],item[1])))//2//3//2//2参考基础以及常用的方法和场景。更完整的用法可以直接参考文档levenlrucacheremovestheleastrecentlyuseditemfromthecacheobject。安装:npminstalllru-cache--saveUsage:varLRU=require("lru-cache"),options={max:500,length:function(n,key){returnn*2+key.length},dispose:function(key,n){n.close()},maxAge:1000*60*60},cache=newLRU(options),otherCache=newLRU(50)//只设置最大尺寸cache.set("key","value")cache.get("key")//"value"//完全支持非字符串键//但请注意,它必须是相同的对象,而不是//只是一个JSON等效对象.varsomeObject={a:1}cache.set(someObject,'avalue')//对象键不是toString()-edcache.set('[objectObject]','adifferentvalue')assert.equal(cache.get(someObject),'avalue')//具有相同键/值的类似对象将不起作用,//因为它是不同的对象identityassert.equal(cache.get({a:1}),undefined)cache.reset()//清空缓存如果你往里面放更多的东西,那么项目就会离队。如果你试图在里面放一些超大的东西,它会马上掉出来Optionsmax缓存的最大大小,通过对缓存中的所有值应用长度函数来检查。不设置它有点傻,因为这就是这个库的用途,但它默认为无穷大。将其设置为非数字或负数将引发TypeError。将它设置为0,它是无限的。maxAgemaximumage(milliseconds),item的最大年龄不会随着年龄的增长而被自动删除,但是如果你想要一个太旧的item,它会删除它并返回undefined而不是给你。将其设置为负值会使一切看起来很旧!将其设置为非数字将引发TypeError。长度函数,用于计算存储项的长度。如果您正在存储字符串或缓冲区,那么您可能需要执行类似function(n,key){returnn.length}的操作。默认为function(){return1},如果你想存储maxlike-sized的东西,没关系。该项目作为第一个参数传递,键作为第二个参数传递。dispose函数,当项目从缓存中移除时调用该函数。如果您想要在项目不再可访问时关闭文件描述符或执行其他清理任务,这将很方便。用键,值调用。它在实际从内部缓存中删除项目之前被调用,所以如果你想立即放回它,你必须在nextTick或setTimeout回调中进行,否则它不会做任何陈旧的事情默认情况下,如果你设置maxAge,它实际上只会在您获取(密钥)存储的项目时从缓存中提取。(即不预先执行setTimeout或其他操作。)如果设置stale:true,它将返回删除前的陈旧值。如果你不设置这个,当你试图获取一个过期的条目时它会返回undefined,就好像它已经被删除了一样。noDisposeOnSet默认情况下,如果您设置了dispose()方法,那么set()操作将调用它来覆盖现有密钥。如果你设置了这个选项,dispose()只会在键从缓存中被逐出时被调用,而不是当键调用updateAgeOnGet时被覆盖当使用具有maxAge的项目时,将此设置为true将导致每个项目的有效时间被更新为从缓存中检索的当前时间,从而使其不会过期。(当然,由于使用频率的原因,缓存还是会失效。)APIset(key,value,maxAge)get(key)=>value两种方法都会更新key的“最近使用”状态。他们做你想做的。maxAge是可选的,如果提供的话,它会覆盖缓存的maxAge选项。如果没有找到key,get()将返回undefined。key和val可以是任何值。peek(key)返回键值(如果未找到则为未定义)而不更新“最近使用”的键。(如果你发现自己经常使用这种方法,你可能使用了错误类型的数据结构,但在某些情况下它很方便。)del(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返回缓存中当前的对象总数。请注意,陈旧的(见选项)项目将作为该项目计数的一部分返回。dump()返回准备序列化和使用的缓存条目数组()手动遍历整个缓存,主动删除旧条目。参考基本常用方法场景。更完整的用法可以直接参考文档node-lru-cacheportfinder自动查找8000到65535可用端口号。:varportfinder=require('portfinder');portfinder.getPort(function(err,port){////`port`在这个范围内保证是一个空闲端口//});或使用承诺(如果支持):constportfinder=require('portfinder');portfinder.getPortPromise().then((port)=>{////`port`保证是空闲端口//在这个范围。//}).catch((err)=>{////无法获得空闲端口,`err`包含原因。//});如果portfinder.getPortPromise()在不支持promisescall(<4)的节点版本上,它将抛出错误,除非Bluebird或任何Promisepollyfill使用Ports搜索范围默认portfinder将从8000开始搜索并扫描到最大端口号(65535)您可以通过设置全局更改此端口号:portfinder。基础端口=3000;//默认值:8000端口查找器。最高端口=3333;//默认值:65535或通过在每次调用中传递一个可选的选项对象:portfinder.getPort({port:3000,//最小端口stopPort:3333//最大端口},callback);方法场景参考basiccommon就这些了,更完整的用法可以直接参考文档node-portfinder
