Deno是什么?Denov1.0.0于5月13日正式发布,它的开发者是RyanDahl,他上一个项目是Node,相信大多数人都知道。作为Node之父,RyanDahl认为,自从他交接项目以来,Node的方向已经越来越偏离自己的初衷,有很多无法解决的问题,因此他决心开发一个新的项目来解决这些problems问题,这个项目叫做Deno。目标是Destroy-node。那么,这是否意味着Deno即将取代Node,成为下一代Node?我们是否应该从现在开始放弃Node而开始使用Deno?让我们来看看。起源2018年,瑞恩在柏林发表演讲。这是他第二次就JS发表公开演讲。第一次是在2009年,当时他宣布了Node项目的诞生。在这次演讲中,除了主要介绍了Node.js中的几个主要问题和不可避免的bug。命名有着千丝万缕的联系。当时大家都认为这个项目就是Node。jsv2,将解决和改进ry提到的问题。两年后的5月13日,Deno1.0终于正式发布。它是使用Rust而不是C++开发的全新服务器端JavaScript运行时。由于Rust原生支持WebAssembly,它也可以直接运行WebAssembly。基于Tokio平台(提供JavaScript所需的所有异步操作),内置V8和tsc引擎,可以直接解释JavaScript和TypeScript。安全集成默认情况下,Node.js为您提供了较高的访问权限,这意味着您可以读写文件系统、进行外部请求以及访问环境变量。虽然作为开发人员拥有此级别的访问权限对开发过程非常有用,但如果您在开发过程中稍有失误,它也会在未来为您的应用程序带来安全风险。在Deno中,脚本默认没有读写权限,必须通过命令行参数显式启用或禁用对不同安全功能的访问。因此,如果脚本需要能够访问/etc文件夹,可以通过以下命令行执行:deno--allow-read=/etcmyscript.ts这与其他平台处理安全的方式类似。如果你是安卓用户,那么肯定有很多应用程序要求你允许它们访问你手机内的不同资源,比如联系人、电话、文件夹等,同样的概念也可以应用在这里。通过将这些标志用作执行脚本的命令行的一部分,您可以提供代码所需的权限。更完整的标准库JavaScript自Node首次发布以来改进了其标准库,但与其他语言相比,它还有很长的路要走。Deno也试图对此进行改进,声称拥有非常完整的标准库,允许开发人员使用官方工具来完成基本任务,而只需要外部库(alaNPM)来完成复杂任务。从本质上讲,Deno拥有开箱即用的工具,可以为终端文本添加颜色、操作外部数据结构(例如二进制、CSV、YAML等)、生成UUID,甚至编写WebSocket。其他更基本的模块也可用,例如文件系统访问、日期辅助函数、http相关函数等。集成TypeScript如果你对TypeScript非常熟悉,那么使用Deno会更容易上手,因为它可以直接原生运行TS。此外,Deno不需要任何外部工具来支持多种语言,它会根据文件后缀自动确定它使用的语言解释引擎。尽管Deno默认处理了很多事情,但你可以用自己的tsconfig.json文件覆盖配置:denorun-ctsconfig.json[your-script.ts]默认配置使用严格模式,所以如果你发现任何错误的代码会立即得到提示。放弃npm和node_modulesDeno决定彻底放弃npm和node_modules,因为npm逻辑越来越复杂,node.js对外部模块几乎没有安全验证措施,node_modules越来越臃肿难管理。那么,Deno是如何处理依赖关系的呢?它通过url:import*aslogfrom"https://deno.land/std/log/mod.ts"加载所有模块;因此,Deno不再需要有一个集中式存储库,之前的package.json也不再需要,依赖管理现在通过在名为deps.ts的文件中包含模块列表及其各自的URL来简化。但是版本管理控制呢?作者已经想到了,可以在url上指定包的版本,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”导出{绿色,粗体};由于这个文件的存在,在内部运行时,会重新导出依赖,这使得应用程序的不同模块都引用同一个源。如果要更新任何模块的版本,可以在deps.ts中修改URL中的版本信息。另外,虽然没有node_modeules目录,依赖还是会被下载下来,隐藏在你的硬盘里,供你离线使用。如果需要重新下载,只需要在命令中加上--reload命令即可。还有什么?Deno还包括其他开箱即用的功能,例如自动测试器、调试器、文件观察器等。但其中一些只是语言提供的API,您需要编写自己的工具才能使用它们。以Deno.watchFS为您提供的filewatcherAPI为例,如果您正在寻找类似nodemon的解决方案,那么您可以自己构建它。这是解决类似问题的23行脚本:最后,它会在短期内取代Node.js吗?虽然Deno的很多想法和概念都非常好,但它确实解决了很多问题。但作为一个从早期就开始使用Node的团队,我认为PHP、Python甚至Ruby(更不用说Java或.NET)都无法与在后端使用JavaScript和异步I/O模型相提并论。多年来,Node(和JavaScript)不断发展以满足行业的需求。在我看来,虽然Deno是以Destroy-node为使命发展起来的,但目前来看,Deno仍然不可能取代Node。Node市场占有率太高,生态不够完善。他们都可以在社区找到,所以基本上不用担心。不过,Deno目前还处于早期孵化阶段,企业很难放弃成熟的技术,投入更多的精力去使用。但它的未来前景依然令人期待。或许在越来越多的行业龙头企业分享使用经验后,Deno的存在会越来越为人所知。
