如何快速体验fnm、nvs、nvm等Node.js版本管理器。$fnminstall18InstallingNodev18.0.0(arm64)$fnmuse18UsingNodev18.0.0$node-vv18.0.0复制代码注意这个版本不是LTS版本,请不要在生产环境中使用,您需要等到2022年10月-25日将是LTS版本。展望未来该项目还在继续其“下一个10”的努力。这项工作的目标是反思导致Node.js前10年成功的原因,并为下一个10.Node的成功设定方向。js正式启动了next-10next-10工作,并讨论了未来几件重要的事情。未来几个重要的事情:现代HTTP友好类型支持渐进式文档,对初学者更友好支持ECMAScript规范和及时跟进Observability,包括logging/metrics/tracing,更好的多线程支持,例如APM打包为单个文件的分发方式FetchAPI前端同学应该很熟悉fetch()API,它提供了标准的网络请求能力,替代了古老的XMLHttpRequest。相比之下,在Node.js这边,官方的http.request()过于底层和基础,往往需要大量封装才能使用。比如302后自动跳转,文件上传,响应结果解析等。因此,在Node.js社区中,出现了很多上层请求库的封装:曾经在社区流行的request库,去年宣布结束维护,也在社区引起了不小的混乱。.我们的Egg内置了urlliburllib,解决了阿里多年在网络请求上踩的坑。它足够稳定,但代码有点旧。去年,Node.js正式推出了undiciundici,这是一个非常现代的库,具有优越的性能、良好的可扩展性和内置的mock功能。于是,Node.js终于有了一个新的内置请求库,它遵循Fetch规范,底层是基于undici实现的。constres=awaitfetch('https://nodejs.org/api/docume...');if(res.ok){constdata=awaitres.json();console.log(data);}代码就这么简单,比http.request()那种回调式的代码简洁多了,写脚本什么的也不需要额外引入类库。全局添加了APIsfetch、FormData、Headers、Request、Response和WebStreamsAPI。可能是为了遵循规范,undici的很多能力比如Mock、Proxy、Pool等都没有提供。测试运行器单元测试非常重要。很多新兴的编程语言都内置了相应的能力,但前端一直都是由社区来实现的。前端同学比较熟悉的测试跑者有MochaMocha和Jest。//mochashowcaseimportassertfrom'assert/strict';describe('test/index.test.js',()=>{it('test1',async()=>{constres=awaitfetch('https://nodejs.org/api/docume...');assert(res.ok);});it.skip('跳过一些测试',()=>{});});Node.js在18.x中正式支持测试功能。测试能力:从'node:test'导入测试;从“断言/严格”导入断言;//等价于describe()test('异步通过测试',async()=>{constres=awaitfetch('https://nodejs.org/api/docume...');assert(res.ok);});test('multileveltest',async(t)=>{//等同于it()awaitt.test('subtest1',(t)=>{assert.strictEqual(1,1);});awaitt.test('subtest2',(t)=>{assert.strictEqual(2,2);});});//相当于describe.skip()/it.skip()test('skipoption',{skip:true},()=>{});//等价于describe.only()/it.only()test('onlyoption',{only:true},()=>{});复制代码看看To:语法其实差不多,会更简洁,就一个test(),选项除了skip和only,还支持concurRency并发不需要启动器,每个文件都是一个可执行的Node.js代码。尚不支持before/after/beforeEach/afterEach功能,请参阅问题描述,后续会提供支持。目前还不支持Reporter,但是日志输出是标准的TAP格式,所以应该很容易复用已有的社区生态。类似覆盖率的演进过程,以前我们需要通过nyc来打桩代码翻译,现在变成了Node.js内置的覆盖率输出,nyc变成了像c8一样的覆盖率报告生成工具。估计后续的mocha等包也会变成类似的上层包,提供批量执行、Reporter等能力。Build-timeuser-landsnapshot简单来说就是可以直接将某个js编译成v8快照,可以大大加快启动时间。目前该版本只能通过Node.js源码编译,只能编译成Node.jsRuntime,即Build-time。直接打包一个markdown渲染逻辑到NodeRuntime$cd/path/to/node/source$./configure--node-snapshot-main=marked.js$makenode#执行编译好的NodeRuntime$out/Release/node>consthtml=globalThis.marked('#这是标题');复制代码秋仪正在继续推广这个能力,以后就不用编译Node.js源码了:$node--build-snapshot--snapshot-blobmarked.blobmarked.js$node--snapshot-blobmarked.blob复制代码V8引擎升级内置V8引擎升级到10.1版本,值得注意的特性:类字段和私有类方法的性能优化。Intl规范的支持在进行日期本地化和字符串处理时非常有用。数组支持findLast()和findLastIndex()等。ESM支持虽然在18.x中不是什么新鲜事,但在过去几个月中继续推动ECMAScript模块实现:支持JSON导入断言。官方支持JSON模块。对HTTPS和HTTP导入的实验性支持。Node.js加载器团队还在继续开发ECMAScript模块加载器实现。升级后的Linux版本的工具链和编译器基于RHEL8构建,需要glibc2.28+。需要macOS10.15+。许多旧版本的Windows不再受支持。关键词:前端训练
