心愿大家不要被题目吓到,纯属为了吸引眼球????。。依据笔者这两天的学习感触,Deno 比 Node 更容易入门,如果你有 Node 的根底那更简略了,很多货色都是能够类比的,学起来豪不费劲。集体认为当初正是入门 Deno 的最好机会,随着 v1.0 的公布 Deno 的 API 已趋于稳定,但整个生态圈的凋敝才刚刚开始,所以趁 Deno 还是个宝宝咱们能够陪它一起成长。
什么是 Deno
Deno 是新一代的 JavaScript 和 TypeScript 运行时(runtime),应用 Rust 和 tokio 实现,和 Node 一样外部也应用 V8 引擎,而且 Deno 和 Node 的作者是同一个人:Ryan Dahl。他发明 Deno 的初衷是为了补救 Node 的某些设计缺点,但鉴于目前 Node 的生态曾经如此凋敝,Deno 临时还无奈齐全取代 Node,Node 应该还将长期稳固存在。
Deno 的次要特点有:
- 安全性:默认没有文件、网络、零碎的拜访权限,除非明确启用。与之相比,Node 是不平安的
- 天生反对 TypeScript
- 实现了局部的规范 Web APIs,比方:fetch、console 等
- 官网提供蕴含很多罕用性能的规范库,解脱对一些第三方库的依赖
- 应用 ES6 的模块零碎(Node 应用的是 CommonJS)
- 依赖可通过近程获取,无需装置到本地
Deno 目前还处于晚期倒退阶段,所以一些性能和 API 可能还会有变动,同时生态也不欠缺,社区提供的工具或多或少会有 bug,然而这些都是失常的,并不障碍咱们去提前学习和理解这个更优良的 Node.js 替代品。
装置 Deno
Shell (Mac, Linux) – 指定版本(举荐):
curl -fsSL https://deno.land/x/install/install.sh | sh -s v1.2.1
PowerShell (Windows) – 指定版本(举荐):
$v="1.2.1"; iwr https://deno.land/x/install/install.ps1 -useb | iex
Homebrew (Mac) :
brew install deno
Chocolatey (Windows) :
choco install deno
留神:装置实现后需依据命令行中的提醒配置环境变量!
在命令行外面输出 deno
命令能够进入编程模式:
应用 deno --version
查看 Deno 的版本:
运行 js、ts 文件
能够应用 deno run <filename.js>
命令运行一个本地 js 文件。
或者,一个 ts 文件:
第一次运行 ts 文件会进行编译,第二次就不必编译了,除非 ts 文件有批改。
Deno 也能够运行一个近程的 ts 文件:
上图文件门路:http://lc-3Cv4Lgro.cn-n1.lcfi…
能够看到,deno 会先下载近程 ts 文件,再编译、运行。如果该近程文件曾经被下载编译过了,再次运行就会从缓存中读取:
如果想从新下载、编译则能够应用 -r
或 --reload
参数,进行从新加载:
Deno 运行时(Runtime)
Deno 的运行时由规范的 Web APIs + Deno global 这两局部组成。
实现 Web APIs 次要是为了遵循已有的 web 规范,提供大家都相熟的接口,以升高学习和应用老本,也让咱们前端同学更容易上手,比方常见的 console
、fetch
、setTimeout
等办法在 Deno 中仍能够失常应用。Web APIs 的作用域为全局,即能够间接应用或者通过 window.***
、globalThis.***
调用。Deno 实现的所有 Web APIs 可参考 Github Repo。
除了 Web APIs,Deno 自有的 API 都放在 Deno
这个命名空间下,比方文件操作、网络连接、过程治理等。
Web APIs
接下来以 fetch API
为例展现 Deno 中 Web APIs 的应用。
Fetch API
比方获取一个近程资源:
fetch.ts:
const res = await fetch('https://jsonplaceholder.typicode.com/posts/1');
const data = await res.json();
console.log(data);
如果应用 VSCode 进行开发,举荐装置 Deno 插件。
运行:
deno run --allow-net fetch.ts
留神:进行网络拜访须要独自受权,应用
--allow-net
flag。
后果:
咱们也能够给 --allow-net
指定可拜访的域名,则拜访未指定的域名就会报错。比方,将下面的命令改为:
deno run --allow-net=github.com fetch.ts
后果将获取不到指定资源:
Deno Global
和 Node 一样,Deno 也能操作文件系统,接下来咱们以此为例展现 Deno global API 的应用。
读文件
比方,读取一个 txt 文件:
doc.txt
This is my first deno app.
read.ts
const decoder = new TextDecoder('utf-8');
const data = await Deno.readFile('doc.txt');
console.log(decoder.decode(data));
和 Node 不同,Deno 默认是没有操作文件权限的,如果应用 deno run read.ts
运行就会报错:
因为咱们须要手动赋予读取文件的权限,应用 --allow-read
flag:
写文件
与读文件对应的,写文件的操作如下:
write.ts:
const encoder = new TextEncoder();
const txt = 'Deno is awesome!';
await Deno.writeFile('doc.txt', encoder.encode(txt));
同样的,咱们须要手动赋予写文件的权限:
deno run --allow-write write.ts
重命名文件
rename.ts:
await Deno.rename('doc.txt','readme.txt');
重命名文件须要同时赋予读和写的权限:
deno run --allow-read --allow-write rename.ts
删除文件
delete.ts:
await Deno.remove('doc.txt');
删除文件须要写的权限:
deno run --allow-write delete.ts
Deno 规范库
除了 Web APIs 和 Deno global,Deno 官网团队还提供了一个规范库,即一组高质量的工具集。这个规范库不蕴含任何第三方依赖,而且代码都会由 Deno 外围团队审查,因而能保障高质量和稳定性。
规范库地址:https://deno.land/std
接下来,咱们以几个罕用的模块为例展现规范库的用法。
fs(文件系统)
规范库中的 fs 相当于对 Deno 自带文件操作的扩大,比方减少了对 JSON 文件的读写:
fs.ts:
import {readJson} from 'https://deno.land/std@0.62.0/fs/mod.ts';
const posts = await readJson('./posts.json');
console.log(posts);
规范库的版本 Deno 的版本临时不对立,应用规范库时应该指定稳固的版本号,如本例中的
0.62.0
,以防止意外的更新和重大更改导致程序不可用。
运行:
deno run --allow-read --unstable fs.ts
因为波及到一些不稳固 API 的调用,所以要加上
--unstable
flag 以启用这些 API
后果:
fs 模块地址:https://deno.land/std/fs
http(网络模块)
和 Node 相似,Deno 的 http 模块也能用于创立一个 web 服务器:
http.ts:
import {serve} from 'https://deno.land/std@0.62.0/http/mod.ts';
const server = serve({port: 3000});
console.log('listening on port 3000');
for await (const req of server) {
req.respond({body: `<h1>Hello, Deno!</h1>`});
}
运行:
deno run --allow-net http.ts
后果:
http 模块地址:https://deno.land/std/http
uuid(通用惟一识别码)
uuid 的作用是生成一个 128 位的全局惟一的 ID。
uuid.ts:
import {v4} from "https://deno.land/std@0.62.0/uuid/mod.ts";
const myUUID = v4.generate();
console.log(myUUID);
运行:
deno run uuid.ts
后果:
uuid 模块地址:https://deno.land/std/uuid
第三方模块
尽管诞生不久但勤奋的同行们曾经为 Deno 生态做出了不少奉献,现有的第三方模块在 这里 能够找到。
上面列举几个比拟有用的模块:
- oak:Deno 版的 koa,面向 http 服务的中间件框架
- abc:另一个好用的 web 利用框架
- denon:Deno 版的 nodemon,用于开发时监听文件变动主动重启程序
- denoify:将 Node 利用转为 Deno 利用
还有一些本来的 npm 包在 Deno 外面还是能够用的,比方:lodash
好了,明天的 Deno 入门就给大家介绍到这里,如果对你有帮忙的话给个赞和关注吧 ????。
本文 Demo 地址:https://github.com/MudOnTire/…