【fcon】聚焦金融行业在数智化的全面革新,一线的金融数智化实践干货
写点什么

node.js 14 正式发布:v8引擎升级,新增异步本地存储api-金马国际

  • 2020-05-10
  • 本文字数:3050 字

    阅读完需:约 10 分钟

node.js 14 正式发布:v8引擎升级,新增异步本地存储api

6 月 17 日,极客时间正式上线,10 周掌握企业级 agents 从设计、开发到部署全流程。


node.js 14 版本于近日正式发布, 此版本包含的亮点如下:


  • 对诊断功能的改进

  • 升级 v8 引擎

  • 新增实验性的异步本地存储 api

  • 强化流 api

  • 移除实验性模块中的警告

  • 移除一部分早期版本中废弃的 api


本文最初发布于 专栏,经原作者授权由 infoq 中文站翻译并分享


node.js 14 取代 node.js 13 成为了我们的当前(current)版本。根据,node.js 14 将是未来 6 个月的当前版本,然后在 2020 年 10 月升级为稳定版本(lts)。 像往常一样,企业用户应该等到 10 月份 node.js 升级为 lts 之后,再升级其生产环境中的 node.js 版本。 不过,现在是使用 node.js 14 测试应用和尝试新功能的最佳时机。


提醒一下,node.js 12 和 node.js 10 的稳定版本将分别持续维护到 2022 年 4 月和 2021 年 4 月()。


点击下载新版本,马上开始学习吧!


在我们开始深入介绍新版本的功能之前,需要提醒一点,那就是新版本中添加的功能会很快被添加到当前稳定版本中去,这就意味着我们在不升级主版本的情况下,也可以在当前稳定版本的小版本更新中使用这些新功能。因此借这个机会我们向大家重点介绍下 node.js 14 版本中的一些内容,即使这些内容中可能有些部分已经在之前的版本中存在了。

诊断报告变成稳定功能

在 node.js 14 中诊断报告将是一个稳定的功能(在 node.js 12 中是试验性的功能)。在推进和建立可用、易用的 node.js 诊断功能的工作进程中,这是非常重要的一步。其中大部分工作是由 node.js 诊断工作组推进的。


诊断报告功能使你在生成报告的时候,既可以根据需要生成,也可以通过事件触发生成。对诊断报告的信息分析可以帮助你诊断各种生产环境问题,包括崩溃、性能慢、内存泄露、cpu 使用率高、未捕获的异常等。点击可以了解到更多关于诊断报告功能的信息。作为一个稳定的特性,启用诊断报告所需的命令行选项将减少一个,并且用户在生产环境中可以很容易启用它。

v8 升级到 v8 8.1

与往常一样,新版本的 v8 javascript 引擎带来了性能调整和改进,同时也使 node.js 保持了在语言和运行时方面持续改进的一致性。v8 的升级还给我们带来了一个好玩的命名,v8 的版本 8(“ v8 的 v8”)。


新的 javascript 功能主要包括:


  • 可选链——

  • nullish 合并——

  • intl.displaynames ——

  • 为 intl.datetimeformat 启用 calendar 和 numberingsystem 选项——


了解 v8 中新功能的更多信息,请查看 node.js v8 博客:。

实验性异步本地存储 api

该项目一直在致力于帮助管理多个版本之间异步调用上下文的 api。实验性 已在早期的版本中引入了。async hook 的关键用例之一是异步本地存储(也称为连续本地存储)。已经有许多 npm 模块提供了 api 来满足这种需求,但是这些年来,在 node.js 核心之外维护这些功能一直很棘手;并且在这个项目上社区已经达成共识,认为由 node.js 提供统一的 api 会更合理,因此 14.x 版本带来了实验性的(也在 13.10 中添加了该 api)。我们正在寻求社区来尝试这个 api,并向我们反馈有关抽象模型、api 接口、用例覆盖范围、功能稳定性、命名、文档等方面的信息,这样我们就可以在以后的版本中将其变成稳定功能。给我们提供反馈的最佳方法是在诊断仓库的)创建一个问题,并命名为“asynclocalstorage api 的经验报告”。

在 node.js 的流实现中,此版本中提供了一些标记为 semver major(译者注:semver major 表示的是大版本号不兼容)的更改。这些更改旨在提高 streams api 的一致性,以消除歧义并简化 node.js 核心各个部分的行为。例如,http.outgoingmessage 与 stream.writable 类似,而 net.socket 的行为和 stream.duplex 完全一样。一个显著的变化是 autodestroy 选项现在默认设置为 true,使流在结束后始终调用_destroy。尽管我们认为这些 semver major 更改对大多数程序不会有影响,因为它们只更改了一些边缘的场景,但如果你严重依赖 stream,最好在 node.js 14 还是当前版本时进行测试,以便为未来的发布做好准备。 node.js 14 将会在 2020 年 10 月成为 lts。

实验性 web assembly 系统接口

用 web assembly 编写的 node.js 包为某些使用场景带来了更好的性能和跨平台支持的机会。 为了支持这些场景,14.x 版本中包含了 web assembly 系统接口()的实验性实现。虽然 wasi 对 node.js v14 来说并不是新事物,但值得注意的是它在简化原生模块的体验上非常有潜力。你可以在 api 文档中了解有关它的更多信息:

移除实验模块警告

其实在 node.js 13 中,我们就已经移除了实验模块警告,不再需要使用 -experimental-modules 标志来处理,但是如果在 node.js 中使用功能,node.js 13 中仍然会发出实验功能警告:esm 模块导入属于试验性功能。


从 node.js 14 开始,在 node.js 中使用 esm 时不再会出现此警告。虽然 node.js 中的 esm 实现仍处于试验阶段。根据我们的:“该功能不受语义版本控制规则的约束。向后兼容的更改或删除可能会在将来的任何版本中发生。”在生产环境中用户应谨慎使用该功能。


请记住,node.js 中 esm 的实现和你所熟悉的并不一样。大多数转译工作流都支持的一些功能是 node.js esm 实现不支持的,例如:可选的文件扩展名或者 json 模块。来自转译环境的模块很可能需要一定程度的重构才能在 node.js 中使用。值得一提的是,我们的许多设计决策都是基于两个主要目标做出的,即规范合规性和 web 兼容性。我们相信,当前的实现为编写 esm 模块提供了一个可以长期使用的模型,为走向通用 javascript 的目标铺平了道路。请在中阅读更多内容。


虽然当前 node.js 中的 esm 实现仍处于试验阶段,但我们相信,推进 node.js 中 esm 功能到“稳定”状态是近在咫尺的。消除警告是朝这个方向迈出的重要一步。

新的编译器和平台最低要求

node.js 为很多平台提供了预构建二进制文件。针对每个主版本,都会对最小工具链做适当的评估和提高。


为了支持包认证功能,我们在这次发布时将所有 macos 的二进制文件转到了 macos 10.15(catalina)下用 xcode 11 编译了。由于二进制文件仍在编译中,以达到支持相应编译目标的发行要求,我们预计不会对较老版本的 macos 的 node.js 用户产生负面影响。针对 node.js 14,我们将最低的 macos 支持版本提高到了 macos 10.13(high sierra)。


在基于 linux 的平台上,对于 node.js 14,最低 gcc 版本仍为 gcc 6,但是我们计划为某些使用 gcc 8 的平台构建并发布二进制文件。


针对停止维护的 windows 系统版本,node.js 14 将不会为其发布版本。


有关更多详细信息,请参见 node.js 。

行动呼吁

在进入 “current” 阶段的 6 个月中,node.js 14 将接受大量贡献到 node.js 中的新特性,因此在接下来的 6 个月中,此发行版本非常适合进行功能尝试、项目测试以及升级 node.js 到最新版本的兼容性测试,同时,请给我们提供反馈,帮助该发行版在 10 月顺利过渡到 lts。

感谢!

我们想借此机会对所有促成此版本发布的贡献者和 node.js 合作者表示非常感谢。我们还要感谢  确保我们拥有创建和测试发行版的基础架构,并对 node.js 14 的工具链进行必要的升级。


你可以点击查看 v14.0.0 版本的完整功能列表。


本博客由 michael dawson 和 bethany griggs 撰写,同时 node.js 社区委员会和 node.js 技术指导委员会也对内容做了贡献。


原文链接:




2020-05-10 09:006730

评论 2 条评论

发布
node.js不发布windows版本了?
2020-05-11 08:48
回复
懂了,意思是win7也不支持了是吧。·针对停止维护的 windows 系统版本,node.js 14 将不会为其发布版本。·
2020-05-11 08:52
回复
没有更多了
  • java新闻综述。

  • 为了方便新同学学习 react native,更快地搭建好环境,这节课会从头到尾带你搭建一套新环境。

    2023-03-01

  • go modules让世界各地的开发者能够始终得到完全相同的代码,而不管它被构建了多少次,从何处获取及由谁获取。

    2022-11-19

  • java近期新闻综述。

  • 7 。darcy引用jep第182条:javac的-source及-target退休策略,讨论老版本jdk的继续支持时间范围。

  • linter作为代码检查工具,可以帮助我们将代码出现质量问题的风险降到最低。

    2022-12-08

  • 在本文的案例中,将主要的salesforce crm应用程序升级到openjdk 11是一项庞大的跨组织工作。

  • 废弃api端点是一项很有挑战性的工作,我们需要考虑所有依赖该api的客户端,避免出现级联的故障。本文阐述了如何安全地关闭废弃的api。

  • 关于jdk 21和jdk 22。

  • rust 的规则是,一旦某个特性在稳定版上发布,我们将保证在以后的所有版本中都支持它。

  • 4月18日,node.js在官方博客发布了node.js 20版本。

  • java近期新闻综述。

  • 这节课我们来学习javascript中编译和打包工具的前世今生和“成功转型”。

    2022-12-15

  • 一文解析现阶段 react native 的发展如何?新架构是否真的可用?是否应该对自己的业务进行升级?

    2023-06-01

  • “你的代码死亡已超六个月,建议彻底删除哦。”

  • 你是否曾在工作中遇到过不知道该如何应对的挑战?那就做实验吧!

  • 希望这篇文章能让你对我们计划在未来几年重点关注的内容有所了解。

  • 这节课我们会学习android系统开发的版本管理、编译调试以及相关的自动化测试等实践,了解引入这些工具及实践的目的。

    2023-04-03

  • deno 1.8 现已正式发布,快来看看有哪些新特性!

  • 开发者体验在很大程度上取决于开发者所在的公司。

发现更多内容
金马国际
网站地图