快速了解 Deno 目前的 API

Deno 是 Node.js 之父新造的轮子。旨在用 Golang 和 TypeScript 实现一个很小的 JS runtime。(其目标不是取代 Node.js)

由于 Deno 还没有发布可直接运行的二进制文件,所以想要了解 Deno 的功能的话你有两种方式:

  1. 下载 Deno 源码自行编译
  2. 直接看源码

第一种方式我在 macOS 上折腾了好久,依然出现各种报错,只好作罢,现在只能等 GitHub 网友推出 Dockerfile 再试试。有在 macOS 上运行成功的可以说下经验。

第二种方式其实也不算难,因为目前 Deno 的功能真的挺少的。

源码速读

首先打开 deno.d.ts 可以看到 deno 提供的 API

declare module "deno" {
  type MessageCallback = (msg: Uint8Array) => void;
  function sub(channel: string, cb: MessageCallback): void;
  function pub(channel: string, payload: Uint8Array): null | ArrayBuffer;

  function readFileSync(filename: string): Uint8Array;
  function writeFileSync(
    filename: string,
    data: Uint8Array,
    perm: number
  ): void;
}
复制代码

sub、pub、readFileSync 和 writeFileSync 共四个。

除此之外还有其他 API,见 testdata 里面的 15 个左右的测试文件,目测有如下功能:

  1. console.log
  2. import { returnsHi, returnsFoo2, printHello3 } from"./subdir/mod1.ts";
  3. import { printHello } from"http://localhost:4545/testdata/subdir/print_hello.ts";
  4. setTimeout
  5. setInterval
  6. throwError
  7. fetch
  8. 提供了 window 全局变量
  9. 提供了 TextEncoder
  10. 提供了 os#exit、os#codeFetch 和 os#codeCache(用途我还没看出来)
  11. 提供了一个极小的 runtime ,按照官方说法,这个 runtime 可移植性很好
  12. 其他

上面是 JS 方面的功能,有些功能应该没写进测试里,我还没时间细看。

可以看出 Deno 从一开始就没有想要兼容 Node.js。

除此之外 Deno 还有一个 V8 worker,它提供的 API 也很简单:

declare namespace V8Worker2 {
  function print(...args: any[]): void;
  type RecvCallback = (ab: ArrayBuffer) => void;
  function recv(cb: RecvCallback): void;
  function send(ab: ArrayBuffer): null | ArrayBuffer;
}
复制代码

就这三个 API。send 和 recv 的使用方法见 dispatch.ts#L60。 deno#pub 就是基于 send 实现的。

如果你看好 Deno,现在学习 go,然后看 Deno 源码,说不定一年后你就是 Deno 大佬了~!

就算 Deno 没火,你也学会了 go,转职 go 工程师指日可待,真是百利而无一害~

少年,我看好你。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值