号称要取代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的怀抱吧,说不定,明年现在我就说真香了呢。