当前位置: 首页 > 后端技术 > Node.js

德诺是什么意思?

时间:2023-04-03 20:18:25 Node.js

作者:ArekNawo有关Deno的信息-一种新的JavaScript运行时,也可能被视为Node.js的继承者。但这意味着什么,我们需要“下一个Node.js”吗?什么是德诺斯?要了解发生了什么,我们首先需要了解Deno到底是什么。正如我之前所说,这是一个新的JavaScript运行时,JS代码将在其中执行的环境。它最初是由RyanDahl创建的,他之前为我们将Deno与Node.js进行了比较。Ryan在他的JSConfEU2018演讲中宣布了Deno,主题为“Node.js十大遗憾”。仅从该消息,您就可以知道发生了什么。Deno是从头开始创建的,是当前Node.js的更好实现。但是Node.js有什么不好呢?Deno与其更成熟的表亲相比如何?与Node.js的比较尽管Deno和Node.js是做类似事情的类似工具,但它们的区别不仅仅是名称颠倒。架构让我们首先了解Deno的内部结构。就像Node.js一样,它基于Chromium的V8JavaScript引擎,并使用事件驱动的非阻塞架构。但两者的主要书写语言不同。Node.js主要是用C++写的,它的异步I/O库是libuv,而Deno用的是Rust,它使用的异步库Tokio也是用Rust写的。我们将不得不拭目以待,看看这些差异如何转化为实际性能。就目前而言,根据Deno的基准测试,两者之间的区别是无法区分的,或者至少是非常微妙的。ES模块你可能知道,Node.js的当前模块系统称为CommonJS(带有require()的那个),尽管ESM(ECMAScript模块(具有导入和导出的模块)已经成为JS的官方标准已经有一段时间了它已经存在了一段时间,可以追溯到2015年推出的ES6。当然,Node.js确实支持ESM,但是这个特性目前([v14.xx)被标记为实验性的,迫使JS社区仍然使用CommonJS模块系统或其他捆绑器。这就是Deno的目标,它只支持ESM模块——一个真正的模块系统!依赖管理但是,除了ESM之外,Deno对Node.js带来的依赖管理带来了更多变化。Deno采用了一种完全不同的依赖关系方法,它基于从NPM注册表中吸取的教训,其中包含数百万个包和类似黑洞的node_modules目录。Deno不需要像NPM那样的注册中心和包管理器,而是直接从URL导入和使用依赖:import{serve}from"https://deno.land/std@0.50.0/http/server.ts";consts=serve({port:8000});console.log("http://localhost:8000/");forawait(constreqofs){req.respond({body:"HelloWorld\n"});}然后将下载的模块隐藏在某处你的电脑。是的,这意味着不再有node_modules!可是等等!还有更多......或者我应该说更少,因为Deno还摆脱了现在制作的全能package.json文件。deps.ts文件别无选择,它更像是所有外部模块的重定向排序文件:export{assert}from"https://deno.land/std@v0.39.0/testing/asserts.ts";从“https://deno.land/std@v0.39.0/fmt/colors.ts”导出{绿色,粗体};至于NPM注册表,由于Deno现在可以从URL加载依赖项,因此这与Node.js的要求不同。但如果您对此选项感兴趣,Deno提供了自己的包托管。TypeScript和其他功能是的,您已经看到了——JavaScript是与Deno一起使用的主要语言,另外还支持TypeScript。该支持是内置的,不需要自定义寄存器或复杂设置之类的东西。不过,除了TS支持之外,Deno还内置了很多其他有用的工具。它们大多以命令的形式出现,例如fmt、bundle或doc,分别提供代码格式化、打包和文档生成等功能。API至于API,Deno绝对是它自己的东西。一切都是用TypeScript编写的,异步API仅基于Promises。核心功能被限制在最低限度,而其他一切都可以在标准库中找到。所以从表面上看,这一切看起来都很好并且非常有前途,但是当您意识到更改所有API意味着将Node.js代码库转换为Deno更加困难时,这种欣快感就会消失。可悲的是,所有新的更好的东西都必须付出代价,对吧?安全最后,安全是Deno最重要的方面之一。与Node.js相比,它对代码执行进行了沙盒处理,只允许访问系统的选定部分。这意味着可以通过传递适当的标志轻松限制对磁盘、网络和子进程等内容的访问。那么这是什么意思?因此,我刚刚以非常简短的方式向您介绍了Deno的一些功能,以便您可以了解所有内容的要点。如果需要,您可以深入挖掘(我将在本文末尾放置一些好文章的链接)。让我们回到这篇博文的主要问题——这是什么意思?好吧,主要是因为Denov1于2020年5月13日发布(距首次发布正好两年)。现在每个人都在问这是否会成为“下一件大事”,或者它是否会完全取代Node.js。我个人认为现在讨论这些还为时过早。鉴于项目的规模和社区的期望,该项目尽管处于v1版本,但在成为可行的Node.js替代品之前还有很长的路要走。请记住,这些技术(即使存在所有差异)仍然在做同样的事情,同时不得不相互竞争。并且Node.js的发展不会过时(比如基于Promise的FSAPI变体或ESM实验性支持),这意味着我们很可能会长期生活在这个两个JavaScript运行时的世界中(说好像是新东西给JS开发人员?)。请记住,我什至没有提到庞大的NPM注册表和生态系统,尽管它们无论如何都不完美,但仍然为Node.js增加了很多价值——这是Deno目前所没有的。底线总而言之,Node.js无处可去,如果您正在开始一个严肃的生产项目,最好坚持使用Node.js,至少现在是这样。话虽如此,没有什么(当然不是我)或任何事情会阻止你使用Deno,甚至不会将Deno用于严肃的项目。它看起来确实像未来,但我们还没有。Deno资源:Deno1.0Deno手册:Deno简介Deno1.0:您需要了解什么?Deno:1.0正式定档5月13日!功能回顾?Deno:1.0正式定于5月13日发布!功能审查