跳至主要内容
Deno 2 终于来了 🎉️
了解更多

Node 的复杂性问题


尽管 Node 如今在 Web 上无处不在,但它从未打算成为 Web 的运行时。但它确实利用了 Web 开发人员使用 JavaScript 完成所有事情 的日益增长的需求。在 Node(以及 npm)不断扩展的范围以服务于这些广泛的用例时,构建一个简单的 Web 应用程序变得不堪重负,因为它需要脆弱的复杂构建步骤、工具设置、管理依赖项差异以及使用垫片和 polyfill 来弥合使用 Web 标准 API 的差距。

Ryan Dahl 回顾了他在构建 Node 时导致其今天不必要地复杂化的遗憾。

配置过多

在 Node.js 中启动一个新项目需要几个步骤,才能真正开始编程。设置 TypeScript。设置您的测试框架。设置格式化程序。一个 linter。一个类型检查器。设置您的捆绑器。添加合适的插件。在选择工具后,调整所有配置文件,使它们协同工作。一些 Next.js 项目中包含超过 30 个配置文件

编程应该仅仅是——编程——而不是在编写任何代码之前配置工具。

偏离 Web 标准和浏览器 JavaScript

由于 Node.js 是作为事件驱动的异步 I/O JavaScript 运行时创建的,因此 Web 标准和互操作性并不是主要重点。因此,Node.js 发明了自己的 API 集(例如 fspath,仅举几例),并且其 JavaScript 版本偏离了现代浏览器中使用的版本。这在使用 Node.js 为 Web 构建时会导致进一步的复杂性,因为您现在需要在工作流程中添加捆绑器、源映射、转译器、垫片等等。

模块加载和解析

Node 的 node_modules 文件夹及其“默认供应商”策略极大地使模块解析算法复杂化。有时不同的包需要不同版本的其他包,从而导致复杂的依赖关系树,其中循环依赖和对等依赖需要同一依赖的不同版本。这会导致花费时间审计依赖关系以及构建时间过长。

Node modules are the known heaviest things in the universe

npm 的 package.json 范围随着时间的推移而扩大,今天包含了太多样板代码。在创建 JavaScript 模块时,我们现在需要包含琐碎的细节,例如 LICENSE 信息。如果您想编写和共享一个单文件 JavaScript 程序,您不应该需要填写冗长的问卷。

Deno:一个全新的开始,为 Web 而建

我们认识到 Node.js 中这些“千刀万剐”的缺陷,并从头开始重新构思了构建 Web 和云软件的现代、高效、简便方法。

Deno 是一个单一、简单的系统——而不是像 npm、node-gyp、gulp、grunt、jest 等等这样的各种各样的独立工具——它包含您需要的开发工具,无需任何配置,因此您可以立即开始编码。

了解更多关于 Deno 的信息