deno入门指南

6/15/2021 OTHER

前不久, deno1.0 正式发布,相信大家应该都已经听过它了.毕竟 deno 的作者正是大名鼎鼎的 nodeJS 之父 Ryan Dahl.他在之前声称 node 已经无力回天了,所以他决定新写一个 deno.意为 destroy node.通俗的说就是一个号练废了,现在要重新练一个号.

deno 怎么发音,有说蒂诺的,有说德诺的.为此,我特意去 YouTube 上听了下 deno 作者的发音,链接戳我 (opens new window),但我怎么感觉听着更像是呆诺呢? 各位同学可以自行爱好发音.

# deno 特性

Deno 是使用 V8 引擎并内置于 Rust 的一个简单现代并且安全的 JavaScript 和 TypeScript 运行时(Tips: 原先是用 golang 开发的,后来因为性能问题改用 Rust) 这里简单的列了一下其中的一些特性:

  1. 默认为安全,除非明确启用,否则没有文件,网络或环境访问权限
  2. 开箱即用的支持 TypeScript
  3. 仅发送一个可执行文件
  4. 具有内置的实用程序,如依赖检查器和代码格式化(fmt)
  5. 拥有一组保证能够与 deno 一起使用的经过审核的标准模块:链接戳我 (opens new window)

# 安装

因为我自己是 macOS 系统,所以国际惯例使用 homebrew 来安装

brew install deno

window 系统的安装方式

choco install deno

还有其他的安装方式,可以自行查看: 如何安装 (opens new window)

# 测试安装

deno --version

如果打印了 deno 的版本号则证明已经安装成功了 在这里插入描述 我这边是打印出了 deno, v8 引擎以及 ts 的版本号

# 更新 deno

deno upgrade

如果想要更新到某一个特定的版本,那就

deno upgrade --version 1.0.1

但是这个更新的速度实在是太... 所以,有时候还是选择手动下包吧,自己动手,丰衣足食 链接戳我 (opens new window).将下载下来的包解压缩后,替换原来的可执行文件即可. 这里可以看到我的 deno 版本已经更新了. 在这里插入图片描述

# 查看命令行

deno --help

基本上的环境都有 --help的指令,方便我们查看相关的指令.这里我们也是照例来简单瞧一瞧都有哪些信息. 在输出结果中,我们可以看到除了常用命令外,它还告诉了我们该如何执行一个脚本

# 运行远程文件

接下来让我们来运行下help信息中展示给我们看的代码:

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

在这里插入图片描述 可以看到当我第一次运行代码的时候,它是先下载,然后再编译. 此时我们再次运行下代码,发现就只是直接编译了. 在这里插入图片描述 这是因为通过外部地址引入的文件或库,在第一次下载后都会缓存在本地,所以第二次就不下载,而是直接编译了. 我们可以看到在终端输出了 Welcome to Deno 🦕这句话.我们打开上面的网址 (opens new window)可以看到它上面的代码就只有一行 在这里插入图片描述 这个可爱的图标就是一只小恐龙,因为 deno 的标志就是一只恐龙呀

# 运行本地文件

我们新建一个index.ts文件

console.log('hello deno');

运行下该文件deno run index.ts 终端输出了hello deno,证明我们的本地文件也已经运行起来了

# 权限

# 文件权限

我们修改代码

console.log(Deno.cwd());

再次执行文件,会报错

Uncaught PermissionDenied: read access to "/Users/xxx/code/deno/deno_test", run again with the --allow-read flag

这是因为 deno 的安全策略(即上面的特性1),默认是没有文件,网络或环境访问权限的,除非我们明确启用.于是我们加上--allow-read参数,再次执行deno run --allow-read index.ts 可以看到我们的文件路径已经打印出来了.

# 网络权限

fetch('https://jsonplaceholder.typicode.com/todos/1')
  .then(response => response.json())
  .then(json => console.log(json))

执行运行命令deno run index.ts,报错

error: Uncaught PermissionDenied: network access to "https://jsonplaceholder.typicode.com/todos/1", run again with the --allow-net flag

重新执行命令deno run --allow-net index.ts, 可以看到输出结果了

{ userId: 1, id: 1, title: "delectus aut autem", completed: false }

# 编辑器插件

前面我们提到了引用外部库的时候,第一次是会下载的,那么我们下载下来的文件在什么地方呢?这里我使用的编辑器是VSCode,我们可以安装一个插件Deno. 在这里插入图片描述 安装好以后,我们只要将鼠标放到引入的 url 上,它就会显示这个文件在我们本地的位置. 在这里插入图片描述

# 内置工具

可以对照特性4,我们先来看原代码 在这里插入图片描述 执行命令后:

deno fmt index.ts

在这里插入图片描述 可以看到代码中开头的空格已经没了

# 引入标准库

我们执行上图中的代码,输出如下: 在这里插入图片描述 这也印证了特性5,deno 拥有一些标准库.

当然除了官方的标准库以外,还有第三方库,可以在这里看到链接戳我 (opens new window)

总结: deno 简单的入门差不多就到这里了,对 deno 已经有了一个大致的概念.我估计大部分的人可能在未来的几年里面,工作中都用不到这个.宝宝心里苦啊 😭,node 还没学会,现在就要毁灭 node 了.

    希望像星光一样闪烁
    文雀