@levinzhang
2018-05-02T06:23:29.000000Z
字数 2113
阅读 607
by
4月24日,Node.js项目发布了10.0.0版本的Node.js,同时npm, Inc发布了6.0版本的npm。这两个发布版本都强调了安全性的增强,Node.js升级到了OpenSSL 1.1.0版本,而npm包含了多项聚焦安全的特性,比如对不安全依赖的自动告警。Node.js发布版本还包含了一个新的原生编程API以及对HTTP2的稳定支持。
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。
查看英文原文:Node.js 10.0 and NPM 6 Released with Emphasis on Security