deno试水

deno May 18, 2020

"Deno is similar to Node and at this stage is NOT a replacement of Node"

                                                                                                                     --Ryan

deno和node相似,但是在现在这个阶段,deno并不是node的替代品

deno的官网上首先列举了这个几个特性:

  1. deno默认非常安全,除非你enable这些特性,否则不能使用file、network,或者环境读取。
  2. 支持typescript。
  3. deno只有一个可执行文件,所有的指令都通过这个文件完成,并且不限于平台。
  4. deno由很多内置的工具,例如dependency inspector(依赖检查器,用来查看你的项目用了哪些依赖)和一个code formatter(代码格式化器)等.
  5. deno由很多标准模块比方说fs,http,hash等

其次我想说的是,deno中还有其他几个特性:

  1. 当你使用await语句的时候,你不需要再用async将它包裹起来。
  2. browser compatibility(浏览器兼容),也就是说现在deno内部几乎对齐了所有浏览器中的接口,你甚至可以直接console.log(window)看一下,什么fetch啦,addEventListener啦,直接可以奥利给。
  3. deno不再有node_modules来将依赖下载下来并且保存在项目下面了,没有npm,也不需要package.json文件啦 。加载模块可以直接import { module } from "https://hellohub/example.ts"这样啦(终于可以不再害怕被node_modules黑洞的支配啦)
    node_modules
  • 安装deno
curl -fsSL https://deno.land/x/install/install.sh | sh

安装之后terminal中会显示你的deno的安装目录,并且需要你将环境变量配置好,如下图:

配置完环境变量之后记得使用source命令让修改之后的文件生效。
安装完deno之后,就可以deno --version查看deno的版本了

小试牛刀

    deno run https://deno.land/std/examples/welcome.ts

我们在terminal中运行如下的指令,其实就是相当于你把这个welcome.ts文件下载到本地并且运行它,之后你会在terminal中得到这个输出:

Welcome to Deno🦕~

HTTP Server in Deno

    import { serve } from "https://deno.land/std/http/server.ts";
    const s = serve({ port: 3000 });
    console.log("http://localhost:3000/");
    for await (const req of s) {
      req.respond({ body: "Hello World\n" });
    }

上面代码的第一行中证实了deno的特性8,引入模块可以直接通过url引入,这个模块在第一次引入的时候会下载到你的本地,之后再次用到这个模块的话会直接从cache里面取得,在我的电脑上这个cache的目录是:

你可以通过deno info这个命令查看在你电脑上的cache目录。(deno info其实就是特性4中的dependency inspector工具)
代码第二行我们创建了一个server并且提供了接口配置。
第四行我们运行了一个loop,来回复请求。这里注意到deno的特性6,可以直接用await语句,而不需要在async方法中。
之后我们将上面的文件保存在一个ts文件中,运行这个文件。

deno run app.js

但是这个时候会抛出一个错误如下图:

这个证实了deno的特性1,因为我们并没有赋予deno访问网络的权限,所以我们需要运行如下的命令enable deno的net特性:

    deno run --allow-net app.ts

然后我电脑会弹出一个promp问我是否允许访问网络,允许之后的你的server就启动啦~
除此之外的几个flag有:
– allow-env allow environment access
– allow-net= allow network access
– allow-plugin allow plugins access
– allow-read= allow file system read access
– allow-run allow running subprocesses
– allow-write= allow file system write access
– allow-all allow all permissions

reference:

https://codeforgeek.com/deno-tutorial-for-beginners/

Great! You've successfully subscribed.
Great! Next, complete checkout for full access.
Welcome back! You've successfully signed in.
Success! Your account is fully activated, you now have access to all content.