Deno初体验及实战入门
前言
最近学了一波Deno, 由于新东西 社区不完善,学的过程中都是翻英文文档和源码慢慢摸索,所以这里总结一些核心要点,帮助读者快速上手入门Deno,详细学习见官方手册
本文的代码例子见 https://github.com/HenryYey/deno-demo
Deno是什么?
deno是一个默认安全运行环境的JS/Ts/WebAssembly runtime,是Node.js之父 Ryan Dahl
开发的新项目,号称是node的替代品,于2020年5月13日正式发布。他的名字由node的字母重新拼接,意为 destory-node。
在node主宰前端的时代,作者为什么还要研发deno呢?因为,作者认为,node目前的发展已经违背了他的初衷,有许多无法解决的痛点,所以,他决定重新打造一个"升级版node"
Node痛点
node最难以忍受的几个痛点如下
- 不安全、臃肿且难以管理的node_modules
- CommonJs与ES模块不兼容
- 本身功能不完整,需要外部工具来兼容typescript、babel、webpack…
Deno新特性
其实对于我们开发者来说,Deno的大部分特性还是和Node一样。但是,也有一些新特性,下面是最核心的几个点:
- 底层语言不同,node使用C++, 而deno使用Rust
- 原生支持typescript,全局window,webAPI,fetch,异步返回promise等
- deno使用ESmodule,即不再使用npm安装包,并且没有package.json集中管理,而是直接通过URL加载
- 默认安全,需要授权才能读写文件、访问网络。
Start
安装及环境配置
deno的安装十分简单(连windows都是一键)
macOS 和 Linux 系统上使用 shell:
curl -fsSL https://deno.land/x/install/install.sh | sh
Win系统上使用 PowerShell:
iwr https://deno.land/x/install/install.ps1 -useb | iex
环境变量是安装后默认配好的。可以输入 deno --version
来验证一下
接下来,我们在ide上装一下扩展插件就好了。
对于VS Code
,安装vscode_deno
hello world
命令行输入时,支持多参数、本地/网络url。具体见 deno --help
首先我们建一个 hello.ts文件,然后写入
console.log("hello,world");
在命令行输入 deno run ./hello.ts
,可以看到控制台输出 hello,world 。即我们成功用deno运行了一个ts文件
包管理
包管理是deno的最大特点,我们可以直接通过本地/网络url来导入包,并且会在本地进行一个缓存。
例如:
import {
Application } from "https://deno.land/x/oak/mod.ts";
import {
serve } from "https://deno.land/std@v0.30.0/http/server.ts"; // 指定版本
其实本质上还是一个upload资源->使用的过程,但是它没有node_modules+package.json,而是直接引入。这种方式个人认为有好有坏,虽然集中包管理会使各种包冗余,体积庞大,但是对于开发者来讲,能方便的阅读、编码和进行版本管理,并且不用担心网络依赖被墙、被黑等。。但是既然做了,肯定是作者认为这种方式更好,所以我们就期待真香把!
建议,创建一个文件来集中管理deps
// deps.ts
export * from "https://deno.land/std@v0.57.0/testing/asserts.ts";
export * from "https://deno.land/x/oak/mod.ts";
// hello.ts 使用
import