是时候学习Deno了
Deno 背景
Deno 是一个 TypeScript(JavaScript)的执行器,听名字就能联想到他和 Node 的关系。
Deno 的作者是 Ryan Dahl,如你所料,他也是 Node 的爹。他在一次 JSConf 上发表了一篇题目为《关于 Node 我所后悔的 10 件事》的演讲,其中提到了 Node 他所不满意的设计,比如:
自己造成的 Bug 在自己看来会显得额外的刺眼,Node 对于我来说的感觉就像指甲划过黑板……
于是他就重写了一个 Deno,这就是程序员的命运吧💩
与 Node 的区别
Deno 跟 Node 一样的地方,是都用了 V8 引擎来执行 JavaScript。Deno 的主要宣传点,是“安全”。在没有用户授权的情况下,脚本无法访问外部资源,例如网络或者磁盘。Deno 还内建了 TypeScript 编译器,可以直接运行 TS 程序。
其他和 Node 不一样的地方:
- Deno 只支持 ESM,不直接支持 CommonJS 模块 (ESM 是未来,CommonJS 需要被淘汰)
- Deno 载入模块位置只支持相对路径或者绝对 url (评论同上)
- 不需要 npm 这样的包管理器 (也就没有 node_modules 目录,不过代码会在第一次下载时被缓存)
- 开箱支持 TypeScript (TypeScript 永远的神,反对就是你不客观)
- 与浏览器兼容,支持 Web API,比如这张图上的对比 (虽然还没想到可以应用在什么地方)
时候到了
Deno 最初是用 Go 语言写的,但是后来改用了 Rust 来编写。第一个 Deno 版本发布于 2018/8/23,1.0 版发布于 2020/5/13,目前在我写这些的时候的最新版是 1.31.1,发布于 2023/2/24。
我在 Deno 早期版本就有研究过,但是当时我认为 Deno 还不能代替 Node。但是今天则有所不同,我认为向 Deno 迁移的时候已经到来了。原因如下:
- 经过 4 年多的开发,Deno 已经变得比较成熟了,社区也在快速扩张。
- 这期间 ECMAScript 标准也在快速演进,JS 程序员每天都有新东西可以学。Node 为了兼容性不得不遗留下很多老旧的 API,这些 API 混在一起,在学习上有一定的混乱性。此外调试项目兼容性也可能是个很花时间的事情。而 Deno 只遵循新的 API,不纠结。
- Deno 更安全,这也是 Deno 一直在强调的事情,这年头,安全这事儿怎么用力过猛都不过分。
- Deno 规范上与浏览器兼容,作为全栈开发狗,前后端规范一致这事儿难道不香吗?
- Deno 提供了 npm 以及 package.json 的兼容性,npm 的模块可以导入给 Deno 模块使用。但是未来 npm 存在的意义越来越低,它所提供的服务会被各种 CDN 服务所取代。
新建文件夹
以上是我目前所总结的 Deno 现状优势,但目前我还没有在实际的项目中使用过 Deno,接下来我会在一些业余项目中尝试使用,比如最终幻想XIV中文维基的机器人上,待积累更多经验心得后再来分享。
目前要做的,是先新建个文件夹:
1 | # 在 Windows PowerShell 下安装 Deno |
然后 VSCode 的插件不可少:点击安装
其他平台和工具的安装就自己去看文档吧:https://deno.land/manual/getting_started
下回见!