点击关注 InfoQ,置顶公众号
接收程序员的技术早餐
作者|Kevin Ball
译者|张卫滨
4 月 24 日,Node.js 项目发布了 10.0.0 版本的 Node.js,同时 npm, Inc 发布了 node 包管理器 npm 的 6.0 版本。这两个发布版本都强调了安全性的增强,Node.js 升级到了 OpenSSL 1.1.0 版本,而 npm 包含了多项聚焦安全的特性,比如对不安全依赖的自动告警。Node.js 发布版本还包含了一个新的原生编程 API 以及对 HTTP2 的稳定支持。
按照官方关于版本发布的博客文章,“Node.js 10.x 主要关注渐进性的增强”,但这也是第一个升级到 OpenSSL 1.1.0 的 Node 版本。当这个版本的 OpenSSL 发布时,它得到了加密专家的赞誉,比如 Open Crypto Audit 的 Kenn White 在一条推文中说到:
OpenSSL 1.1.0 是一个重要的重构:IPv6、EVP、Bignum、核心结构、状态机、协商。添加了 CCM、OCB、 ChaCha/Poly、scrypt、BLAKE2。
从 Wikipedia 上的版本发布历史可以看到,OpenSSL 的 1.1.0 版本是从 2010 年发布的 1.0 版本以来,第一次破坏二进制兼容性的版本,并且升级到了新的 ABI(应用二进制接口,Application Binary Interface),这样能够允许 Node.js 无缝适应后续的更新,包括按照日程五月份发布的 OpenSSL 1.1.1,其中会包含对 TLS 1.3 的支持。
Node.js 发布版本还包含了第一个非实验性版本的 Node.js API(N-API)。按照发布说明:
N-API 是一个稳定的模块 API,它独立于 V8 中的变更,允许模块在更新版本的 Node.js 中运行,而不需要重新编译。
新 API 的意图不仅在于让包含原生(非 JavaScript)代码的模块能够健壮地升级 V8 的版本,它还能允许包含 V8 之外的其他 JavaScript 引擎。在最初宣布 N-API 的博客文章中,来自微软的 Arunush Chandra 和来自 IBM 的 Michael Dawson 认为直接或间接依赖原生 API 会影响到 30% 的包,这对于升级 Node.js 版本来说,是很大的障碍。Chandra 和 Dawson 说到:
针对原生模块的下一代、ABI 稳定的 Node.js API,或者称为 N-API,致力于解决这个问题,它的实现方式是为 JavaScript VM 中的原生 API 提供一个 ABI 稳定的抽象层。这样的话,就允许原生模块的作者针对每个平台和架构编译一次,就能将其应用于实现了 N-API 的任意 Node.js 版本。对于构建在不同 VM 的 Node.js 版本这一点依然能够成立,如 Node-ChakraCore。
这个版本的 Node.js 还将对 http2 的支持作为 Node.js 核心的稳定部分,在 Node.js 8 版本系列中,这还是一个实验性的特性。内置的支持已经构建在了流行的服务器框架 Hapi 和 Koa 中,Express 则还需要一些额外的配置。开发人员如果想要了解这些工具的话,可以在 Rising Stack 的博客上查阅一个快速教程。
这个释放版本是 10.x 发布线的第一个版本,在 2018 年 10 月它将成为新的长期服务(Long Term Service,LTS)发布线。LTS 通常能够保证支持三年,按照发布日程将会支持到 2021 年。但是,按照 Node.js 的发布日程,最近的 LTS 版本(8.x)会提前过期(2019 年 12 月),这样做是为了和 OpenSSL 1.0.2 的 End-Of-Life 保持一致。
新版本的 Node.js 还包含了错误处理、诊断和性能方面的提升。感兴趣的开发人员可以参考 Node.js 博客上完整的发布说明,并在项目主页上下载 Node.js 的发布版本。
为了与 Node.js 10 的版本发布保持一致,Node 包管理器(Node Package Manager,npm)也宣布释放自己的主版本,即 6.0 版本。新的 npm 6.0 版本能够用于之前版本的 Node.js,也能用于新的 Node.js 10.0.0,按照发布说明主要的升级理由在于安全性的增强:
不久,npm 注册表的每个用户如果使用具有已知安全问题的代码的话,都会收到自动告警。npm 将会基于 NSP 数据库自动检查安装请求,如果代码包含安全漏洞的话,将会返回警告。
另外,npm@6 中的新命令“npm audit”不久就能递归分析你的依赖树,以便于识别哪里不安全,这样的话,你就可以将依赖替换为新版本或者寻找一个更安全的依赖来替代它。
开发人员可以通过运行 npm i -g npm@latest 命令升级至最新版本的 npm。
原文链接:
https://www.infoq.com/news/2018/04/node-10-npm-6-released-security