以代號「Dubnium」爲表明的Node 10於2018年4月24日發佈,並將於2018年10月進入長期支持(LTS)。JavaScript開發人員一直在激動地等待今天,今天咱們來看看這個版本帶來的新特徵。html
如今,Node中的錯誤信息已被標準化。node
在Node環境中,處理錯誤信息一直是一個痛苦的工做。 之前,它們只包含一個沒有其餘標識符關聯的字符串消息。 若是開發人員但願程序根據特定消息採起調試操做,惟一的辦法是對錯誤內容進行字符串比較。git
因爲錯誤信息的處理須要精確的字符串匹配,所以即便對消息的最小更新也沒法添加到下一個主要節點版本,以便它不會中斷SemVer。 經過將錯誤從消息中解耦出來,它將使開發人員更輕鬆地工做,並容許Node在不引入重大更改的狀況下改進錯誤消息。 要了解更多信息,請閱讀Michael Dawson的文章節點錯誤代碼。npm
Node文檔將N-API描述爲構建本地插件的API。 它獨立於底層的JavaScript運行時(ex V8),並做爲Node.js自己的一部分進行維護。 這個API將是跨Node.js版本穩定的應用程序二進制接口(ABI)。 它旨在將Addons與基礎JavaScript引擎中的更改隔離,並容許爲一個版本編譯的模塊在更高版本的Node.js上運行,而無需從新編譯。api
以前在Node 8中實驗性地引入了N-API,並將從Node 10開始穩定。在Node版本之間升級再也不會引發模塊損壞。 它也將向後移植以實現Node.js v6.x和v8.x的兼容性。promise
Node 8 引入了一個實驗性的 HTTP/2 模塊,此次是對 Node 的一次很好的升級。 HTTP/2 改進了標準的 HTTP 協議:瀏覽器
多路複用
單一鏈接
服務器推送
優先級
頭壓縮
脫離實驗階段後,原生的 HTTP/2 模塊將有助於改進節點服務器和它們提供的Web體驗。安全
Node 中止使用 Chromium 中的 V8 JavaScript引擎,而且 Node.js v10 使用了最新版本的V8 引擎。 對於瀏覽器而言,Chrome 66 提供的V8 Engine v6.6在JavaScript的解析和編譯時間方面能夠減小約20-40%。 所以,咱們能夠預期 Node 10 也會在這方面有更大的收益。 並且它還提供異步生成器和陣列性能改進。服務器
速度纔是最重要的,最新的版本並不會讓人失望。 查看V8團隊的文章以瞭解更多信息。異步
// ESM import pkg from 「./pkg」 export default { a, b: 2 } vs. // CJS const pkg = require(「./pkg」) module.exports = { a, b: 2 }
雖然咱們在 Node 10 中沒看到對ES模塊的所有支持,但他們仍在努力完善。
Node.js 一直在使用CommonJS(CJS),它是 require 和 module.exports 語法。 在2015年的史詩級ES6版本中,推出了一種新的模塊系統,即ECMAScript模塊(ESM)。 做爲ECMA的官方實施以及開發人員的熱愛和普遍採用,Node一直致力於實施ESM規範。
將ESM集成到Node中並非一個徹底平滑的路徑,由於它與當前系統衝突。 然而,對齊的能力是很是重要的,Node正在努力提供解決方案。 若是您想了解更多信息,Gil Tayar 就此話題寫了一篇很棒的文章。
Node 10 添加了跟蹤事件,爲開發人員提供更多關於其Node.js應用程序可見性。 這種新的功能能夠提供有關時間和性能問題的改進指標。 API 容許用戶在運行時打開或關閉事件,從而能夠根據須要診斷問題。
在啓動 node 應用時,添加參數 --trace-event-categories
能夠將其打開,能夠文檔裏瞭解到更多。
npm最近從v5.7升級到v6.0,而且Node 10將當即提供更新。npm的這一版本增長了全部各類改進,包括性能,安全性和穩定性。 在他們的博客上了解更多關於npm v6的信息。
Node配備了現代加密支持,可支持備受期待的 ChaCha20 密碼和 Poly1305 驗證器。 TLS 1.3最近已完成定稿,待 Node.js v10 在10月份發佈 LTS 時,它將會徹底支持該標準。
與文件系統交互是許多 Node 應用程序的主要組成部分,Node 10將承諾發行fs包的實驗版本。 之前這些函數經過回調處理異步操做,但可使用Node 8附帶的util.promisify()
函數進行轉換。如今,開發人員能夠在不須要額外步驟的狀況下使用帶有promise的fs。