返回顶部
首页 > 资讯 > 前端开发 > html >Deno和Node.js的区别是什么
  • 542
分享到

Deno和Node.js的区别是什么

2024-04-02 19:04:59 542人浏览 薄情痞子
摘要

本篇内容主要讲解“Deno和node.js的区别是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Deno和node.js的区别是什么”吧!

本篇内容主要讲解“Deno和node.js的区别是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Deno和node.js的区别是什么”吧!

Deno是为解决Node的一些内在问题而创建的,那么与Node.js的区别是什么?下面本篇文章带大家详细了解一下Deno,介绍一下Deno和Node.js的区别。

【推荐学习:《nodejs 教程》】

Node.js的作者Ryan Dahl,过去一年半的时间都在打造一个新的javascript运行环境Deno来解决Node的一些内在问题。

不过不要误会,得益于JavaScript庞大的社区生态和使用范围,Node是一个非常不错的JavaScript运行环境。然而,Dahl 也承认在Node的某些方面他应该考虑得更全面一些,比如:安全性,模块机制,依赖管理等。

在他的计划中,他并不会去预想Deno在短时间内能够发展成一个多大规模的平台。当然咯,把时间调回2009年,JavaScript还是人人都能取笑的一个有些怪异的小语言,也木有现在这么多语言特性。

什么是Deno,以及它的主要特性是哪些?

Deno是基于Google V8引擎构建的安全的typescript运行环境。 下面是构建Deno的一些物料:

  • Rust(Deno的核心模块使用Rust编写,Node的核心模块是用c++实现的)

  • Tokio(Rust实现的异步编程框架

  • TypeScript(Deno对JavaScript和TypeScript都支持开箱即用)

  • V8(Google出品JavaScript运行时,主要用在Chrome和Node中)

接下来看看Deno提供了哪些特性。

安全性(权限管理)

Deno最重要的特性就是安全性。

相较于Node,Deno默认使用沙箱环境执行代码,这意味着运行环境没有操作以下模块权限:

  • 文件系统

  • 网络

  • 执行其他的脚本

  • 系统环境变量

让我们瞅一眼Deno的权限系统是如何工作滴。

(async () => {
 const encoder = new TextEncoder();
 const data = encoder.encode('Hello world\n');

 await Deno.writeFile('hello.txt', data);
 await Deno.writeFile('hello2.txt', data);
})();

这个脚本分别创建了两个名为hello.txthello2.txt的文件,并在其中写入Hello world。但是这段代码运行在沙箱环境中,所以是没有文件系统的操作权限滴。

还有一点值得注意,在上面的脚本中我们使用Deno命名空间来操作文件,而不像在Node中使用fs模块。Deno命名空间提供了超多基础方法。不过使用Deno命名空间会导致我们的代码失去了对浏览器的兼容性,这个问题我们晚点再聊。

使用下面的命令执行上述脚本:

$ deno run write-hello.ts

执行之后,我们会收到下面的提示:

Deno requests write access to "/Users/user/folder/hello.txt". Grant? [a/y/n/d (a = allow always, y = allow once, n = deny once, d = deny always)]

实际上,基于上面创建文件的脚本我们会收到两次来自沙箱环境的权限提示。不过如果我们选择allow always选项,就只会被询问一次啦。

如果我们选了deny,会抛出一个PermissionDenied的错误,如果我们没写错误处理逻辑的话,进程在此时就被终止啦。

如果我们用下面的命令来执行脚本:

deno run --allow-write write-hello.ts

会在没有提示的情况下创建这两个文件。

Deno针对文件系统的命令行标志位,除了--allow-write,还有--allow-net/--allow-env/--allow-run,分别用来开启针对网络、系统环境变量和操作子进程的权限。

模块机制

Deno使用浏览器一样的方式,通过URL来加载模块。很多人第一次见到在服务端的import语句中见到URL会感到有点困惑,但对我来说这还蛮好理解的:

import { assertEquals } from "https://deno.land/std/testing/asserts.ts";

你觉得通过URL来引入模块会有啥大不了的吗?答案其实蛮简单的:通过使用URL来加载模块,Deno就可以避免引入一个类似npm的中心化系统来发布package,npm最近受到了很多吐槽。

通过URL来引入代码,可以让包的作者们使用自己最喜爱的方式来维护和发布自己的代码。再也不会有package.JSONnode_modules了。

当我们启动应用之后,Deno会下载所有被引用的文件,并将它们缓存到本地。一旦引用被缓存下来,Deno就不会再去下载它们了,除非我们使用-- relaod标志位去触发重新下载。

还有几个问题值得我们讨论一哈:

万一存放引用的站点挂了咋办?

由于没有了一个中心化的包管理站点,那些存放模块的站点可能因为各种各样的原因挂掉。如果在开发甚至生产环境出现这种情况是非常危险滴!

我们在上一节提到,Deno会缓存好已下载的模块。由于缓存是存放在我们的本地磁盘的,Deno的作者建议将这些缓存提交到代码仓库里。这样一来,即使存放引用的站点挂了,开发者们还是可以使用已经下载好的模块(只不过版本是被住的啦)。

Deno会把缓存存储在环境变量$DENO_DIR所指定的目录下,如果我们不去设置这个变量,它会指向系统默认的缓存目录。我们可以把$DENO_DIR指定我们的本地仓库,然后把它们提交到版本管理系统中(比如:git

只能使用URL来引用模块吗?

总是敲URL显得有点XX,还好,Deno提供了两种方案来避免我们成为XX。

第一种,你可以在本地文件中将已经引用的模块重新export出来,比如:

export { test, assertEquals } from "Https://deno.land/std/testing/mod.ts";

假如上面这个文件叫local-test-utils.ts。现在,如果我们想再次使用test或者assertEquals方法,只需要像下面这样引用它们:

import { test, assertEquals } from './local-test-utils.ts';

看得出来,是不是通过URL来引用它们并不是最重要的啦。

第二种方案,建一个引用映射表,比如像下面这样一个JSON文件:

{
   "imports": {
      "http/": "https://deno.land/std/http/"
   }
}

然后把它像这样import到代码里:

import { serve } from "http/server.ts";

为了让它生效,我们还需要通过--importmap标志位让Deno来引入import映射表:

$ deno run --importmap=import_map.json hello_server.ts

如何进行版本管理

版本管理必须由包作者来支持,这样在client端可以通过在URL中设置版本号来下载:https://unpkg.com/liltest@0.0.5/dist/liltest.js

浏览器兼容性

Deno有计划做到兼容浏览器。从技术上讲,在使用ES module的前提下,我们不需要使用任何类似webpack的打包工具就能在浏览器上运行Deno代码。

不过呢,你可以使用类似Babel这样的工具可以把代码转化成ES5版本的JavaScript,这样可以兼容那些不支持所有最新语言特性的低版本浏览器中,带来的后果就是最终文件里有很多不是必须的冗余代码,增大代码的体积。

结果取决于我们的主要目的是啥。

支持TypeScript开箱即用

不需要任何配置文件就能在Deno中轻易地使用TypeScript。当然咯,你也可以编写纯JavaScript代码,并使用Deno去执行它。

总结

Deno,作为一个新的TypeScript和JavaScript的运行环境,是一个非常有趣的技术项目,并且至今已经稳定发展了一段时间。但是距离在生产环境中去使用它还有比较长的一段路要走。

通过去中心化(或者翻译分布式?)的机制,把JavaScript生态系统从npm这样中心化的包管理系统中解放了出来。

Dahl希望在这个夏天快结束的时候能够发布1.0版本,所以如果你对Deno未来的新进展感兴趣的话,可以给它个star。

到此,相信大家对“Deno和Node.js的区别是什么”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: Deno和Node.js的区别是什么

本文链接: https://lsjlt.com/news/67453.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Deno和Node.js的区别是什么
    本篇内容主要讲解“Deno和Node.js的区别是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Deno和Node.js的区别是什么”吧! ...
    99+
    2024-04-02
  • node.js和Deno有什么区别
    这篇文章主要介绍了node.js和Deno有什么区别,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。什么是 Deno?要了解发生了什么,我们首先需要看一下 Deno 到底是什么...
    99+
    2023-06-14
  • Deno与Node.js的区别是什么
    本篇文章给大家分享的是有关Deno与Node.js的区别是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。1. Deno是一个基于...
    99+
    2024-04-02
  • Deno和Node.js的区别有哪些
    这篇“Deno和Node.js的区别有哪些”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Deno和Node.js的区别有哪些...
    99+
    2023-06-17
  • Deno和Node.js有哪些区别
    本篇内容介绍了“Deno和Node.js有哪些区别”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!什么是Deno,以及它的主要特性是哪些?De...
    99+
    2023-07-04
  • node.js和javascript区别是什么
    本篇内容介绍了“node.js和javascript区别是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!node.js和javascri...
    99+
    2023-06-17
  • node.js与JavaScript的区别是什么
    这期内容当中小编将会给大家带来有关node.js与JavaScript的区别是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。node.js是一个基于Chrom V8引...
    99+
    2024-04-02
  • Node.js中Process.nextTick()和Process.setImmediate()有什么区别
    本篇内容介绍了“Node.js中Process.nextTick()和Process.setImmediate()有什么区别”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希...
    99+
    2023-07-02
  • PHP和Node.js区别以及各自的优缺点是什么
    这期内容当中小编将会给大家带来有关PHP和Node.js区别以及各自的优缺点是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。网络正在处于一个日新月异的发展时代。服务器端开发人员在选择语言的时候非常困惑...
    99+
    2023-06-17
  • php === 和==的区别是什么
    本文操作环境:windows7系统、PHP7.1版、DELL G3电脑php === 和==的区别是什么?php中的==和===的用法及区别在开发中进场遇到数值匹配的问题,那么在进行匹配时,遇到下面的情况,你觉得结果是什么?<php ...
    99+
    2021-03-17
    php
  • ./ 和 sh 的区别是什么
    ./ 和 sh 的区别是什么?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。./ 和 sh的使用区别使用“./”执行脚本,对应的xxx.sh脚本必须要有执行权限;使用“sh”...
    99+
    2023-06-09
  • php和j2ee的区别是什么
    本文操作环境:Windows10系统、PHP7.1版、Dell G3电脑。php和j2ee的区别是什么J2EE Java 2 Platform ,Enterprise Edition Java 2平台,企业版J2EE可以创建分布式的大型跨平...
    99+
    2020-10-13
    php
  • php4和php5的区别是什么
    本教程操作环境:windows10系统、PHP7.1版、DELL G3电脑php4和php5的区别是什么构造函数和析构函数在 PHP4 中,当函数与对象同名时,这个函数将成为该对象的构造函数,并且在 PHP4 中没有析构函数的概念。在 PH...
    99+
    2015-12-28
    PHP
  • php5.6和php7的区别是什么
    本教程操作环境:windows10系统、PHP7.1版、DELL G3电脑php5.6和php7的区别是什么一、俩者的区别PHP7.0比PHP5.6性能提升了俩倍。PHP7.0全面一致支持64位。PHP7.0之前出现的致命错误,都改成了抛出...
    99+
    2018-06-05
    PHP
  • android和java的区别是什么
    从整体来讲,java和android的区别在于android程序是基于组件和配置的,而且android开发以java语言为开发工具,表面上看他们有点同宗不同门,但实际上区别十分大,android是一个主流智能手机操作系统,java是一种开发...
    99+
    2019-02-19
    java教程 android java 区别
  • c 和java的区别是什么
    Java和C都是指令式语言(Imperative Language),不同的是Java有面向对象(OO)成分在里面,而C是完全面向过程的,C的高级版本C++、C#支持面向对象。另外一个不同是,Java跨平台,既不同的操作系统都可以通过JVM...
    99+
    2019-02-23
    java教程 c java 区别
  • j2ee和java的区别是什么?
    什么是java?java是一种编程语言,java不仅有着c++的优点,还放弃了一些难以理解的名词,目前java是一种面向对象的代表,java语言简单易用,而且功能强大,因此很多程序员使用java编程桌面程序,和嵌入式系统。Java是一种可以...
    99+
    2020-12-18
    java入门 j2ee java
  • js和java的区别是什么?
    Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。js(JavaScript)是一种直译式脚本语言,是一种动态类型、弱类型、基于原型...
    99+
    2015-02-08
    js java
  • php5.4和5.6的区别是什么
    PHP5.4和5.6的区别是:1、5.6版本在定义变量时允许使用之前定义的常量进行计算,并且允许常量作为函数参数默认值,而5.4版本则不允许;2、5.6版本命名空间支持常量和函数,而5.4版本不支持。本文操作环境:Windows10系统、P...
    99+
    2022-06-22
    php
  • PHP7.1和5.6的区别是什么
    PHP7.1和5.6的区别:1、7.1版本全面一致支持64位,而5.6版本则没有全部支持;2、7.1版本移除了一些老的不再支持的服务端应用编程端口的扩展,而5.6版本则没有移除;3、7.1版本新增了函数的返回类型声明和匿名类,而5.6版本中...
    99+
    2022-06-23
    php
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作