nodejs交互工具库系列库角色chalk-pipe使用更简单的样式字符串创建chalk样式解决方案chalk正确处理终端字符串样式Commander.jscompletenode.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和zlibfs-extrafs-extra添加了原生fs模块中不包含的文件系统方法,并添加了对fs方法的promise支持。它还使用graceful-fs来防止EMFILE错误。替换fs应该是一个dropinreplacement。为什么?我厌倦了在我的大多数项目中包含mkdirp、rimraf和ncp。安装npminstallfs-extra使用fs-extra是原生fs的降级。fs中的所有方法都附加到fs-extra。如果没有传入回调,所有fs方法都会返回promises。您不再需要包含原始的fs模块:constfs=require('fs')//这不再是必需的您现在可以这样做:constfs=require('fs-extra')或者,如果您愿意明确表示您使用的是fs-extra而不是fs,您可能希望将fs变量命名为fse,如下所示:constfse=require('fs-extra')您也可以同时保留两者,但这是多余的:constfs=require('fs')constfse=require('fs-extra')SyncvsAsyncvsAsync/Await大多数方法默认都是异步的。如果没有传入回调,所有异步方法都会返回一个承诺。另一方面,如果发生错误,同步方法将抛出异常。此外,Async/Await在发生时会抛出错误。示例:constfs=require('fs-extra')//异步promises:fs.copy('/tmp/myfile','/tmp/mynewfile').then(()=>console.log('success!')).catch(err=>console.error(err))//异常回调:fs.copy('/tmp/myfile','/tmp/mynewfile',err=>{if(err)returnconsole.error(err)console.log('success!')})//Sync:try{fs.copySync('/tmp/myfile','/tmp/mynewfile')console.log('success!')}catch(err){console.error(err)}//Async/Await:asyncfunctioncopyFiles(){try{awaitfs.copy('/tmp/myfile','/tmp/mynewfile')console.log('成功!')}catch(err){console.error(err)}}copyFiles()MethodsAsynccopyemptyDirensureFileensureDirensureLinkensureSymlinkmkdirpmkdirsmoveoutputFileoutputJsonpathExistsreadJsonremovewriteJsonSynccopySyncemptyDirSyncensureFileSyncensureDirSyncensureLinkSyncensureSymlinkSyncmkdirpSyncmkdirsSyncmoveSyncoutputFileSyncoutputJsonSyncpathExistsSyncreadJsonSyncremoveSyncwriteJsonSyncNOTE:您仍然可以使用原生的Node.js方法。他们被承诺并复制到fs-extra。请参阅有关fs.read()、fs.write()和fs.writev()的注释walk()和walkSync()发生了什么?从v2.0.0中的fs-extra中删除了它们。如果您需要该功能,walk和walkSync可以作为单独的包使用,即klaw和klaw-sync。参考基本常用的方法和场景。更完整的用法可以直接参考文档node-fs-extraAcorn一个小巧快速的JavaScript解析器,完全用JavaScript编写。CommunityAcorn是在MIT许可证下发布的开源软件。欢迎报告错误或在github上创建拉取请求。对于问题和讨论,请使用Tern论坛。包这个存储库包含三个包:acorn:主解析器acorn-loose:容错解析器acorn-walk:语法树解析器要构建存储库的内容,请运行npminstall.gitclonehttps://github。com/acornjs/acorn.gitcdacornnpminstallPlugin开发Acorn旨在支持在合理范围内重新定义解析器工作方式的插件。插件可以添加新的标记类型和新的标记生成器上下文(如果需要),并扩展解析器对象中的方法。它不是一个干净、优雅的api——使用它需要了解Acorn的内部结构,当这些内部结构发生重大变化时,插件很可能会崩溃。然而,这种方式可以为JavaScript方言创建解析器,而无需创建Acorn的所有分支。原则上,甚至可以组合这些插件,例如,如果您有一个解析类型的插件和一个解析JSX样式XML文本的插件,您可以同时加载它们并使用JSX标记和类型解析代码。插件是解析器类中用于扩展解析器类的函数。插件可以通过简单地将它们应用到解析器类(或已被其他插件扩展的解析器类的版本)来使用。但从语法上讲,当您使用多个插件时,静态方法解析器可能会变得有点笨拙。可以使用任意数量的插件值作为参数调用extend,创建一个由所有这些插件扩展的解析器类。您通常只需要创建一次这样的扩展类并重复调用它的解析,以避免不必要地混淆JavaScript引擎的优化器。const{Parser}=require("acorn")constMyParser=Parser.extend(require("acorn-jsx")(),require("acorn-bigint"))console.log(MyParser.parse("//一些bigint+JSX代码"))插件覆盖其新解析器类中的方法以获得附加功能。建议插件包将插件函数导出为默认值,或者,如果它接受配置参数,则导出一个创建插件函数的构造函数。这是一个简单的插件,它向readToken方法添加了一些代码,它可能看起来像这样:super.readToken(code)}}}参考基本常用方法和场景。更完整的用法可以直接参考文档acornzlib.jsZLIB.js是用JavaScript实现的ZLIB(RFC1950)、DEFLATE(RFC1951)、GZIP(RFC1952)和PKZIP。用法在“bin”目录中使用一个。zlib_and_gzip.min.js:ZLIB+GZIP(Raw)rawdeflate.js:RawDeflaterawinflate.js:RawInflatatezlib.min.js:ZLIBInflate+Deflateinflate.min.js:ZLIBInflatedeflate.min.js:ZLIBDeflateinflate_stream.min.js:ZLIBInflate(streammode)(GZIP)gzip.min.js:GZIPgunzip.min.js:GUNZIP(PKZIP)zip.min.jsZIPunzip.min.jsUNZIPnode-zlib.js:(ZLIB+GZIPfornode.js)CompressionRawDeflate//plain=Array.
