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 集(例如 fs
、path
,仅举几例),并且其 JavaScript 版本偏离了现代浏览器中使用的版本。这在使用 Node.js 为 Web 构建时会导致进一步的复杂性,因为您现在需要在工作流程中添加捆绑器、源映射、转译器、垫片等等。
模块加载和解析
Node 的 node_modules
文件夹及其“默认供应商”策略极大地使模块解析算法复杂化。有时不同的包需要不同版本的其他包,从而导致复杂的依赖关系树,其中循环依赖和对等依赖需要同一依赖的不同版本。这会导致花费时间审计依赖关系以及构建时间过长。
npm 的 package.json
范围随着时间的推移而扩大,今天包含了太多样板代码。在创建 JavaScript 模块时,我们现在需要包含琐碎的细节,例如 LICENSE 信息。如果您想编写和共享一个单文件 JavaScript 程序,您不应该需要填写冗长的问卷。
Deno:一个全新的开始,为 Web 而建
我们认识到 Node.js 中这些“千刀万剐”的缺陷,并从头开始重新构思了构建 Web 和云软件的现代、高效、简便方法。
Deno 是一个单一、简单的系统——而不是像 npm、node-gyp、gulp、grunt、jest 等等这样的各种各样的独立工具——它包含您需要的开发工具,无需任何配置,因此您可以立即开始编码。
了解更多关于 Deno 的信息