Deno 初次使用

昨天,deno1.0正式Release了,弃JS转TS两年后,当然是要尝个鲜的。我想在这个时候或是更早测试版去使用的,一定都是 TypeScript 粉了,进入正题

发音 daɪnə 与 dinosaur:恐龙 前面发音相同

deno 发音 [ daɪnə ] 与 dinosaur:恐龙 前面发音相同

安装

在 windows 环境,打开 powershell ,输入以下内容那可安装 :

1
iwr https://deno.land/x/install/install.ps1 -useb | iex

我这边大概十分钟左右,显示出,即安装成功,安装在当前登录用户的 .deno 目录下,只有一个 deno.exe 文件, 这个文件包括了deno运行所需要的一切。

1
2
Deno was installed successfully to C:\Users\xxxxx\.deno\bin\deno.exe
Run 'deno --help' to get started

其它平台或Windows的其它安装方式参考 : https://deno.land/#installation

获取帮助

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
PS C:\Windows\system32> deno --help
deno 1.0.0
A secure JavaScript and TypeScript runtime

Docs: https://deno.land/manual
Modules: https://deno.land/std/ https://deno.land/x/
Bugs: https://github.com/denoland/deno/issues

To start the REPL:
deno

To execute a script:
deno run https://deno.land/std/examples/welcome.ts

To evaluate code in the shell:
deno eval "console.log(30933 + 404)"

USAGE:
deno [OPTIONS] [SUBCOMMAND]

OPTIONS:
-h, --help
Prints help information

-L, --log-level <log-level>
Set log level [possible values: debug, info]

-q, --quiet
Suppress diagnostic output
By default, subcommands print human-readable diagnostic messages to stderr.
If the flag is set, restrict these messages to errors.
-V, --version
Prints version information


SUBCOMMANDS:
bundle Bundle module and dependencies into single files
cache Cache the dependencies
doc Show documentation for a module
eval Eval script
fmt Format source files
help Prints this message or the help of the given subcommand(s)
info Show info about cache or info related to source file
install Install script as an executable
repl Read Eval Print Loop
run Run a program given a filename or url to the module
test Run tests
types Print runtime TypeScript declarations
upgrade Upgrade deno executable to given version

ENVIRONMENT VARIABLES:
DENO_DIR Set deno's base directory (defaults to $HOME/.deno)
DENO_INSTALL_ROOT Set deno install's output directory
(defaults to $HOME/.deno/bin)
NO_COLOR Set to disable color
HTTP_PROXY Proxy address for HTTP requests
(module downloads, fetch)
HTTPS_PROXY Same but for HTTPS

翻译一下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
SUBCOMMANDS:
bundle 打包 : (相当于 webpack?)
cache 缓存依赖库
doc 查看一个模块的文档
eval 执行脚本
fmt 代码的格式美化
help 查看本帮助
info 显示本地的依赖缓存
install 安装脚本为可执行文件
repl 进入 REPL 环境
run 运行脚本
test 运行测试
types 打印 TypeScript 运行时
upgrade 升级 Deno 到指定版本

运行

  1. 运行官网示例

deno 可以(通过下载)直接运行互联网上的代码,比如Github ,或者私人服务器,也可以是例如 pika.dev or jspm.io.的包平台

1
2
3
4
5
C:\Users\xxxx>deno run https://deno.land/std/examples/welcome.ts
Download https://deno.land/std/examples/welcome.ts
Warning Implicitly using master branch https://deno.land/std/examples/welcome.ts
Compile https://deno.land/std/examples/welcome.ts
Welcome to Deno 🦕
  1. 运行项目脚本

现在,建立 index.ts 文件 console.log('Hello Deno') 运行

1
2
3
PS D:\deno> deno run index.ts
Compile file:///D:/deno/index.ts
Hello Deno

也可以修改代码,引入一个库,获得更强大的能力

1
2
import { printf } from "https://deno.land/std/fmt/printf.ts"
printf("%*.*f", 9, 8, 456.0)

其它探索

  1. 如你所愿,你可以直接写 typescript , 不需要 ts-nodets-loaderbabel 等工具了。
  2. deno 和 nodejs 一样,默认提供了一套核心 api,功能基本可以覆盖到nodejs的各方面。 https://doc.deno.land/https/github.com/denoland/deno/releases/latest/download/lib.deno.d.ts
  3. deno 没有nodejs的模块概念,不会有 package.json 和 node_moudles ,所有引入只能通过 url 进行! 支持 file:// https:// 或相对路径
  4. deno 导出模块,不再使用 CommonJS 语法,统一使用 ESModule 语法规范,deno 内部所有异步方法都是返回 Promise,不再有 callback 之类的玩意
  5. 相对于 nodejs deno 还内置了一个 windows 全局变量,有 fetch,setTimeout 等方法,可以仿生浏览器环境
  6. 多年前布道过一端时间的 golang 非常喜欢 golang 的 fmt ,虽然被很多强迫症吐槽,现在 deno 也可以用了~

小结

由于时间问题,就没有去写浏览器应用了,很多前端包虽然没有发布在 deno.land 上,但理论上 github 甚至 npmjs.com 的链接都是可以直接用的,deno 同时支持 ts 与 js 所以基本不用担心资源问题。

但是 bundle 与 webpack 比起来,可能还是会有些不足,所以现在中大型项目还是得先观望观望。

后面有深入的话,继续更新,回见!