近日,Node 之父 Ryan Dahl 发布新的开源项目 [deno](https://github.com/ry/deno),从官方介绍来看,可以认为它是下一代 Node,使用 Go 语言代替 C++ 重新编写跨平台底层内核驱动,上层仍然使用 V8 引擎,最终提供一个安全的 TypeScript 运行时。
它的特性包括:
支持 TypeScript 2.8 开箱即用;
无 package.json,无 npm,不追求兼容 Node;
通过 URL 方式引入依赖而非通过本地模块,并在第一次运行的时候进行加载和缓存,并仅在代码使用–reload运行,依赖才会更新,引入方式如:
import { test } from "https://unpkg.com/deno_testing@0.0.5/testing.ts"
import { log } from "./util.ts"
可以控制文件系统和网络访问权限以运行沙盒代码,默认访问只读文件系统可访问,无网络权限。V8 和 Golang 之间的访问只能通过 protobuf 中定义的序列化消息完成;
发生未捕捉错误时自动终止运行;
支持 top-level 的 await;
最终创建单一可执行文件;
目标是兼容浏览器;
可以作为库引入,用于建立自己的 JavaScript runtime。
这几个特性,有好几个都是针对目前 Node 的痛点而来的,包括无 package.json、依赖的引入和更新方式,针对的就是被广泛吐槽的过大的node_modules。
同时,不追求兼容 node,可以视为 ry 想彻底抛弃 node 包袱,打造一个更好的 JS 运行时。
作者在 GitHub Issue 回复开发者的几个问题:
deno 和 Node 的区别是什么?
ry 开玩笑称,目前两者最大的区别是 Node 大行其道,而 Deno 尚未投入使用。
从更高层面上来说,Deno 尽可能简化 V8 与系统 API 的耦合,并打造更加简单、稳定的模块系统,以及一个安全的沙箱运行环境。
再者,使用 Golang 而不是 C++ 作为底层语言,这样,添加高级功能时会比在 Node 中更加容易,比如在 Go 中添加 http2.0支持,只需添加一些路由 API 和一些配置到 protobuf 中。
Deno 诞生的目的,是为了创建更简单和安全的非浏览器 runtime,它在这个时候出现,是因为现在的开发工具比 2009 年更好。
我们还可以认为 Deno 将是目前 Node 生态一些难解问题的终极答案,比如依赖管理、安全性、稳定性、横向扩展等等。
Deno 的诞生,将启发更多人投入到下一代 Node 的探索当中,这比之前 Node 的一些分叉更具备创新和革命性。
目前 Deno 正在紧张开发当中,我们也将持续关注它的进展。
Deno Github 地址:
https://github.com/ry/deno
不过国人在 issue 中的评论,真是~
有疑问加站长微信联系(非本文作者)