×

Node Bug 太多惨遭创始人抛弃,前端开发要变天?

作者:ceshi2018.06.07来源:Web前端之家浏览:29295评论:0
关键词:nodejs

曾经 Node 的面世,将 JavaScript 首次带入了后端服务器端开发,不仅让诸多的前端开发者更能轻而易举地编写出高性能的 Web 服务,同时也大大地提高了服务器的安全性。而如今经过九年的发展,其创始人 Ryan Dahl 不仅"嫌弃"了存在很多槽点的 Node,还重新发布了一个新的开源项目——Deno,而这究竟是怎么一回事?Deno 会将 Node 取而代之吗?对前端开发者的影响大吗?接下来,我们将一一为大家解读其中背后的故事。

近日,在 2018 年的 JSConf 上,Node 之父 Ryan Dahl 发表了主题为《Design Mistakes in Node》的演讲,在演讲中,他为曾在 Node 设计上所犯的一些错误表示遗憾,并为此提出了一种新的原型设计思路,创建了一套立足于 V8 的安全 TypeScript 运行时项目——Deno


▌ Node 初始目标

对于 Node 最初创建的目标,主要是集中于编程事件驱动的 HTTP 服务器上。随着时间的推移,后来也验证了这一点对于当时服务器端 JavaScript 来说至关重要。遗憾的是,Node 后期并没有得到很好的维护,因为在 2012 年,已经在这个项目上耗费了四年时光的 Ryan Dahl 认为 Node 已经实现了他的预期目标,如:

支持多种协议:HTTP、SSL、......

可运行于 Windows(使用 lOCP链接

具有稳定的 API。

通过 NPM 实现增加外部模块的生态系统。

且 Ryan Dahl 认为对于 Node 的后期也只需修复一下因不断增加的代码而出现的 Bug,于是他在 Node 如日中天时离开了 Node 团队。直至最近,他才发现曾经的自己错了,虽说当时 Node 已经为用户提供了一套友好的非阻塞框架,但是后续还是出现了很多不可回避的问题。

▌安全性不足

V8 本身是一个非常好的安全沙箱。如果当时能够对某些特定应用程序的维护更加上心,也许 Node 可以实现比其他任何语言更好的安全保障。譬如,用户的 linter 不应该具备完全访问计算机和网络的权限。

▌构建系统(GYP)

要知道构建系统是非常困难且重要的。最初 V8(借助 Chrome)开始使用 GYP,而 Node 也对接了 GYP,但是后来 Chrome 放弃了 GYP 而转向 GN,因此 Node 成为 GYP 的唯一用户。对于 GYP 的继续使用可能是 Node 核心最大的败笔。

对此,Ryan Dahl 认为自己不应该引导开发者基于 V8 引擎使用 C++ 编写,而是应该提供一个核心外部函数接口(FFI)。其实早前,就有很多人建议他转向 FFI,但当时 Ryan Dahl 并没在意,这让他现在追悔莫及。

最后, Ryan Dahl 还对 libuv 采用 autotools 表示非常不满意。

▌package.json

对于 NPM,虽然是 Isaac 创建了 package.json(绝大部分)。但最终是由 Ryan Dahl 通过了允许 Node 的 require() 函数来检查 package.json 文件,将 NPM 包含在 Node 的发行版本中,使之成为现实中标准方案。然而,令人懊恼的是,这其中存在一个模块的集中(私有控制)存储库。

即 require("somemodule") 并非唯一,它在很多地方都被定义了。



此外,package.json 这一文件还衍生出“模块”作为文件目录的概念。这不是一种绝对必要的抽象机制,此前在 web 上也从未出现过。

如今的 package.json 文件中包含了各种不必要的信息。譬如许可、库、描述等等。

如果在导入时仅使用相关文件和 URL,则路径就可定义版本,也没有必要列出依赖关系。


▌node_modules

node_modules 极大地提高了模块解析算法复杂度。vendored-by-default 初衷是好的,但是在实践中,仅使用 $NODE_PATH 并不能实现预期的目的。它偏离了浏览器语义。

Ryan Dahl 表示这是他的错,且遗憾的是,这一问题如今也无法弥补。

▌require("module") 没有 ".js"扩展名

在脚本标签的 src 属性中,“.js”不容忽视,而在 require("module") 中没有明确地显示出 .js 扩展名。

▌index.js

您的支持是我们创作的动力!
温馨提示:本文作者系,经Web前端之家编辑修改或补充,转载请注明出处和本文链接:
https://jiangweishan.com/article/node1928301283.html

网友评论文明上网理性发言已有0人参与

发表评论: