Deno 是什么?
十个 Node.js 的设计错误
Node.js 最初设计者 Ryan Dahl 2018 年在 JS Conf Berlin 的分享
沒有坚持使用 Promise
-
在 2009 年六月在 Node 中开始引入 JavaScript 的 Promises,但又在 2010年二月就移除掉了。
结果,随着日子久远,Node 里面就遍布着 async/await 和 promise 的不同 async API 设计,直至现时都极难整合
看轻了安全性(Security)
- JavaScript Engine V8 本身有很好的 sandbox 架构,但是有时候 Node.js 本身没有好好善用到,例如有可以直接读取 Memory 的 例子、或者 linter 可以直接使用网络功能等的漏洞。
没有从 GYP 建构系统转到 GN
-
Node.js 用到的 JavaScript Engine V8 一开始是使用 GYP 来建构的,Node 理所当然也跟随;后来 V8 转用了 GN (Generate Ninja),只剩下Node 成为唯一的用家。 GN 比用 Python 写的 GYP 快近起码 20倍,对于使用者来说,简直是天渊之别。
Ryan 更这样说:
继续使用 GYP 该是Node 核心的最大失误。
The continued usage of GYP is the probably largest failure of Node core.
继续使用 GYP,没有提供 FFI
-
继续用 GYP 引伸到另一个难题,就 是怎样去提供跨程式语言的接口。
现在Node 只提供了由 C++ 到 V8 的 binding 指南,事实上对开发者来说是严重不足的。很多人建议过转用 Foreign Function Interface (FFI)的模式,但都一一被当时的 Ryan 漠视了。
package.json (以及依赖了 npm)
-
npm 的 Issac 发明了 package.json,Ryan 认为把 Node 能在 main program 中 用 require() 读取 npm 的 package.json 是一个坏的开始。
后来,演化至 Node 中包含 npm 作为标准,以致现在Node 的 Module 变成了由 npm「中央集权」了。
事实上,因为 npm 而引起的「灾难性」事件也有不少,其中最有名的应该算是 2016 年发生的 left-pad chaos。
在任何地方也可以 require(“somemodule”)
- 你可以不必在 package.json 中註明 dependency,在Node 中近乎是任何地方也能夠 require local 或者是 remote 的程式碼。