前端笔记 Front-end Dev Engineer

Deno 小小尝试

2020-05-27
 

号称要取代node的deno

前世今生

Deno 是Node.js之父 Ryan Dahl 在2017年创建的项目。

总之,他认为node是一个失败的项目,npm的包管理设计是更加失败,所以他创建了这个号称主打安全的deno。

三年中,陆陆续续,换了各种开发语言,最终就是目前我们看到的使用Rust编写而成的 JavaScript 与 TypeScript 的运行环境。并且在2020年5月13日,发布了1.0版本。

既然正式版都出来了,我们就尝尝鲜。

安装

首先,也不知道Deno的官网在哪,所以直接上 github 搜索即可。

https://github.com/denoland/deno

很快就能看到Readme中的,大大的”install”,老规矩,先看一遍。看完之后,很失望啊,全是脚本安装,国内的网令人纠结啊。

不过没事,精明的我,找到了 https://deno.land/ 官方手册网站,在其中 https://deno.land/#installation 一节有提到

or download a release binary from the releases page.

然后开心的找到二进制包以及 d.ts 文件

  • deno-x86_64-apple-darwin.zip
  • deno-x86_64-pc-windows-msvc.zip
  • deno-x86_64-unknown-linux-gnu.zip
  • deno_src.tar.gz
  • lib.deno.d.ts
  • Source code(zip)
  • Source code(tar.gz)

源码安装是不可能源码安装的,这辈子都不可能的,只能下载二进制包,勉强使用,写写代码。

我是win10电脑,所以,老老实实选择 deno-x86_64-pc-windows-msvc.zip 即可。

解压后,就是一个光溜溜的deno.exe 文件。

接下来,理论上放到环境变量中去就可以使用了,方法如下:

假设使用 PowerShell,并且你的deno放在 C:\Program Files\deno:

# Run as administrator:
$env:DENO_INSTALL = "C:\Program Files\deno"
iwr https://deno.land/x/install/install.ps1 -useb | iex

不过我这种懒人,只是拿来做试验的,还是直接使用相对路径即可了。

上手官方Demo

我是啥都不会的萌新,那么只能先从案例入手了。老规矩,先看文档 https://deno.land/manual/getting_started/first_steps

很好,人家也是老规矩,优良传统 Hello World

console.log("Welcome to Deno 🦕");

轻轻松松就执行成功了,没有成就感。直接上第二个网络例子。

// Copyright 2018-2020 the Deno authors. All rights reserved. MIT license.
const url_ = Deno.args[0];
const res = await fetch(url_);

// TODO(ry) Re-enable streaming in this example.
// Originally we did: await Deno.copy(res.body, Deno.stdout);
// But maybe more JS-y would be: res.pipeTo(Deno.stdout);

const body = new Uint8Array(await res.arrayBuffer());
await Deno.stdout.write(body);

代码很简单,就是获取参数(网址),然后请求,返回结果标准输出。这里不得不吐槽,node的http模块真的难用,还要我自己拼接,还容易中文被截断。

然后愉快的执行命令

deno.exe run curl.ts https://www.baidu.com

然后愉快的得到一个报错

error: Uncaught PermissionDenied: network access to "https://www.baidu.com/", run again with the --allow-net flag

然后搜索一下,就知道了deno所谓的安全,那就是啥权限都要执行者给予,不给就不让运行。 这里我要访问网络,所以需要--allow-net打开网络权限

deno.exe run --allow-net curl.ts https://www.baidu.com

然后轻松拿到百度。

小结

Demo还有很多,我就不在一一尝试了。直接谈谈感受。

deno还是标准的js运行环境(支持ts),语言都没变对我们前端还是一如既往轻松。

会node的切换到deno,其实也没有太大的困难,要权限的东西,提前写上就好了。宿主环境提供的api和node不一致,但是大同小异,用的时候搜文档即可,只是不需要引入包,都在Deno对象上。

包管理被抛弃,直接使用es6的模块,甚至支持远程脚本文件,总体来说确实比node方便。

单从运行环境而言 deno 确实完善了,发布1.0 是名至实归的。但是从生产环境来说,它还是不合格的,没有生态,node项目也无法直接迁移。大量依赖库都是缺失的。周边生态一个都没有,什么都是要从零开始。所以只能说是一个玩具了。未来到底会不会替代node及node生态环境也不好说。

所以,目前我对它的态度,还是敬而远之吧,在看看它的生态打算怎么组件,包管理打算怎么玩,有没有好的解决方案,在到时候看会不会投入deno的怀抱吧,说不定,明年现在我就说真香了呢。


评论

Content