作者:DavidNeal在js的第10个年头,npm上可用的包数量超过100万。Node.js本身的下载量也在持续增长,同比增长40%。另一个重要的里程碑是最近将Node.js添加到OpenJS基金会,这有望改善项目的状态和可持续性,并改善与整个JavaScript社区的协作。如您所见,短时间内发生了很多事情!Node.js社区仍在蓬勃发展,即使到了2020年,它仍然没有放缓的迹象。Node.js的下一个主要版本正在探索更多有趣的功能。在本文中,我将探讨Node.js社区在2020年可以期待的一些最重要的更新。Node.js13有哪些新功能?在撰写本文时,Node.js的最新版本是13。在2020年之前已经有很多功能和更新可以试用。这里有一些亮点:ECMAScript模块WebAssembly支持诊断报告完全国际化支持日期,时间、数字和货币格式支持QUIC协议V8JavaScript引擎性能更新在深入了解这些细节之前,请查看我们对Node.js的支持发布时间表预期。2020Node.js发布流程每六个月发布一次新的Node.js主要版本,即四月和十月。它所指的主要版本称为当前版本。撰写本文时Node.js的当前版本为13,于2019年10月发布。奇数版本(例如v9、v11和v13)每年10月发布,并且生命周期较短,使得它们不适合生产环境。您可以将奇数版本视为Beta版本。它们用于测试Node.js的下一个偶数版本中的新功能和更改。偶数版本(例如v8、v10和v12)每年四月发布。发布后,之前的奇数版本将停止更新。虽然它比odd版本更稳定,但它会在接下来的六个月内继续积极开发。将前六个月视为“发布候选”阶段。一旦偶数版本经过六个月的测试,它就会进入一个称为“长期支持”(LTS)的新阶段。LTS阶段被视为生产就绪。在接下来的12个月中,LTS版本将包含错误修复、安全更新和其他旨在不破坏任何现有程序的改进。LTS之后,还有最后的“维护”阶段。在维护期间,Node.js版本只会收到严重错误和安全修复。在持续18个月的维护阶段后,它被视为生命周期结束(EOL),不再受支持。预计2020年发布时间表我们应该期望在2020年看到以下发布时间表。13.x是当前版本,正在积极开发中10.x和12.x是LTS2020年4月14.x发布并成为14.x发布后的当前版本13.x工作立即停止10.x进入维护2020年10月15.x发布并成为当前版本14.x进入LTS12.x进入维护OpenSSL的生命周期-1.0.2在2019年底结束,所以Node8.x的EOL计划在2019年底。你应该开始计划将你的8.x程序迁移到10.x或12.x。从v13.2.0开始支持ECMAScript模块。Node.js支持传统的CommonJS模块和新的标准ECMAScript(ES)模块。这意味着您最终可以使用浏览器中可能已有的导入和导出语法。另外需要注意的是,Node.js中的ES模块默认启用了JavaScript严格模式,你不必在每个文件的开头都指定usestrict。//消息文件异步函数sendMessage{...}export{sendMessage};//索引文件导入{sendMessage}from"./message";但是您仍然需要做一些工作才能让Node.js知道正在使用ES模块。两种最常见的方法是使用.mjs文件扩展名,或在最近的父package.json文件中指定"type":"module"。选项1:将.js文件重命名为.mjs文件。方案二:更新根package.json文件,或者将package.json添加到包含ES模块的目录下,并指定type为module。{"type":"module"}另一种可能性是在根package.json文件中启用ES模块,然后重命名所有CommonJS模块文件以使用.cjs扩展名。我个人觉得.mjs和.cjs扩展名很粗略,所以我很想看到一些通过package.json文件指定ES和CommonJS模块使用的方法。Node.js可以导入WebAssembly模块除了支持ES模块外,它还可以导入WebAssembly(Wasm)模块!这是一种可移植的编译二进制格式,解析速度比JavaScript快,并以本机速度执行。C/C++、Go、C#、Java、Python、Elixir、Rust等语言都可以用来创建WebAssembly模块。在撰写本文时,WebAssembly模块支持仍处于试验阶段。要启用此功能,需要在执行Node.js程序时传递一个命令行标志。例如:node--experimental-wasm-modulesindex.js假设您有一个图像处理库作为WebAssembly模块实现。使用此Wasm模块的语法如下。import*asimageUtilsfrom"./imageUtils.wasm";import*asfsfrom"fs";(async()=>{constimage=awaitfs.promises.readFile("./image.png");constupdatedImage=awaitimageUtils.rotate90degrees(image);})();也可以使用Node.js中新的动态import()语句导入。"usestrict";constfs=require("fs");(async()=>{constimageUtils=awaitimport("./imageUtils.wasm");constimage=awaitfs.promises.readFile("./image.png");constupdatedImage=awaitimageUtils.rotate90degrees(image);})();WebAssembly系统接口(WASI)与JavaScript一样,WebAssembly的设计考虑了安全性,以防止对底层操作系统访问(有时称为“沙箱”)造成任何损害。但有时Node.js中的WebAssembly模块可能会受益于能够进行系统级调用。因此出现了新的WebAssembly系统接口(WASI)。WASI被设计为用于调用底层系统(例如主机应用程序、操作系统等)的标准接口。WASI支持最近致力于Node.js项目。WASI可能是2020年另一个令人兴奋的功能!在2020年发布诊断报告诊断报告是人类可读的JSON格式的流程信息摘要,包括调用堆栈、操作系统信息、加载的模块和其他有助于支持应用程序的有用数据。这些报告可以在未处理的异常、致命错误、进程信号或使用新的process.reportAPI时触发。诊断报告可以在Node.js中配置并保存到具有指定文件名的文件夹中。在撰写本文时,诊断报告仍处于试验阶段。要启用此功能,需要在执行Node.js程序时传递命令行标志:node--experimental-report--report-uncaught-exception--report-filename=./diagnostics.jsonindex.js国际化支持将在2020年的扩展中从v13.x开始,Node.js带有完整的ICU(Unicode的国际化组件)。ICU是一个成熟且流行的全球化图书馆。包括对格式化数字、日期、时间和货币的支持,执行时间计算和字符串比较的能力,以及在Unicode和其他字符集之间转换文本的能力。2020年Node.js的其他更新QUIC协议支持:具有增强性能和可靠性的现代传输。更好的Python3构建支持:到2020年,应该可以使用Python3构建Node.js和本机模块。更新的V8JavaScript引擎:V8的7.8和7.9版本提高了性能并支持Wasm。稳定的工作线程API:Node.js中的工作线程可以支持并行的、CPU密集型的JavaScript操作。了解有关Node.js、JavaScript和安全性的更多信息本文只是2020年改进Node.js的所有艰苦工作的开始!如果您有兴趣了解最新更新或想以某种方式参与其中,请在Node.js官方网站上查看为Node.js做贡献的方法。
