"Deno is similar to Node and at this stage is NOT a replacement of Node"
--Ryan
deno和node相似,但是在现在这个阶段,deno并不是node的替代品
deno的官网上首先列举了这个几个特性:
- deno默认非常安全,除非你enable这些特性,否则不能使用file、network,或者环境读取。
- 支持typescript。
- deno只有一个可执行文件,所有的指令都通过这个文件完成,并且不限于平台。
- deno由很多内置的工具,例如dependency inspector(依赖检查器,用来查看你的项目用了哪些依赖)和一个code formatter(代码格式化器)等.
- deno由很多标准模块比方说fs,http,hash等
其次我想说的是,deno中还有其他几个特性:
- 当你使用
await
语句的时候,你不需要再用async
将它包裹起来。 - browser compatibility(浏览器兼容),也就是说现在deno内部几乎对齐了所有浏览器中的接口,你甚至可以直接
console.log(window)
看一下,什么fetch啦,addEventListener啦,直接可以奥利给。 - deno不再有node_modules来将依赖下载下来并且保存在项目下面了,没有npm,也不需要package.json文件啦 。加载模块可以直接
import { module } from "https://hellohub/example.ts"
这样啦(终于可以不再害怕被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