Deno 1.30 发布,内置 Node 模块


Deno 是一个简单、现代和安全的 JavaScript 和 TypeScript 的运行时,它使用 V8 并以 Rust 构建。

Deno 1.30 已发布,值得关注的更新包括:

对内置 Node.js 模块的支持

在 Deno 中,npm 包已经可以通过 Deno 的 Node.js 兼容层访问内置的 Node.js 模块,如 fs、path、process 等等。

在这个版本中,这些模块通过 node: specifiers 暴露给 Deno 代码:

import { readFileSync } from "node:fs";
console.log(readFileSync("deno.json", { encoding: "utf8" }));

如果你同时使用 Deno 和 Node.js 的代码,node: 方案将在两个运行时中工作。

deno.json 成为一个导入映射

这个版本带来了对配置文件的重大更新,现在可以直接使用 deno.json 文件作为导入映射。

在以前的版本中,可以通过指定 importMap 键和导入映射文件的路径来告诉 Deno 去哪里寻找导入映射文件。

许多用户发现它很有用,但是这种方法意味着有两个配置文件。为了更简洁,你现在可以在你的配置文件中指定 importsscopes键,Deno 将自动开始把配置文件当作导入映射。

Node/npm 和 LSP 的修复

这个版本包括超过 25 个与 npm 功能和 Node-API 相关的错误修复。此外,LSP 继续得到改进,有超过 10 个 bug 修复。

Deno API 的改变

对稳定 API 的改变:

  • Deno.permissions APIs 获得了同步对应部分
Deno.permissions.querySync({ name: "read", path: "./log.txt" }) 。
Deno.permissions.revokeSync({ name: "read", path: "./log.txt" })。
Deno.permissions.requestSync({ name: "read", path: "./log.txt" });
  • Deno.writeFile()Deno.writeTextFile() 现在接受 ReadableStream 作为第二个参数。

    const stream = new ReadableStream({
    pull(controller) {
    controller.enqueue(new Uint8Array([1]));
    controller.enqueue(new Uint8Array([2]));
    controller.close();
    },
    });
    await Deno.writeFile("/tmp/test.txt", stream);
    assertEquals(Deno.readFileSync(filename), new Uint8Array([1, 2]));
    
  • 增加了一个新的 Deno.env.has(name) API

    Deno.env.set("TEST_VAR", "A");
    assert(Deno.env.has("TEST_VAR"));
    Deno.env.delete("TEST_VAR");
    assert(!Deno.env.has("TEST_VAR"));
    
  • ……

API 稳定化:

Deno.Listener.ref()Deno.Listener.unref() 现在已经稳定。使用这些 API 时不再需要 --unstable 标志。

对不稳定的 API 的改变:

  • new Deno.Command({}).spawn() 中,stdin 选项的默认值被改为 "inherit” 意味着如果你没有特别配置这个选项,标准输入将从父进程中继承。

  • Deno.dlopen 添加对按值传递结构的支持:

    const Rect = ["f64", "f64", "f64", "f64"];
    const dylib = Deno.dlopen("./dylib.so", {
    make_rect: {
    parameters: ["f64", "f64", "f64", "f64"],
    result: { struct: Rect },
    },
    });
    const rect_sync = dylib.symbols.make_rect(10, 20, 100, 200);
    assertInstanceOf(rect_sync, Uint8Array);
    assertEquals(rect_sync.length, 4 * 8);
    assertEquals(Array.from(new Float64Array(rect_sync.buffer)), [
    10,
    20,
    100,
    200,
    ]);
    

新的不稳定的 API:

这个版本增加了 3 个新的 API:

  • Deno.osUptime() (需要 -allow-sys=osUptime 权限)
  • Deno.Conn.ref()
  • Deno.Conn.unref()

这些 API 需要 --unstable 标志,但我们计划在下一个版本中稳定它们。

移除内部 Deno.core

这个版本删除了 Deno.core命名空间。Deno.core是一个私有的 API,没有稳定性保证。这一变化对大多数用户应该没有影响。

Deno fmt 支持配置分号

Deno fmt 的一个长期以来被反复要求的功能是能够在没有分号的情况下进行格式化。现在可以通过使用 --options-no-semicolons 标志或在 Deno 配置文件的 fmt 配置中指定 "semiColons": false 来实现这一功能。

{
"fmt": {
"options": {
"semiColons": false
}
}
}

更多详情可查看:https://github.com/denoland/deno/releases/tag/v1.30.0


相關推薦

2023-07-07

2023 年 7 月 5 日,Deno 团队发布了 Deno 1.35 版本。此次更新的目的是使程序开发尽量简单,因此运行时内置强大的工具链、原生 TypeScript 支持和 Web 标准 API,可以跳过配置和学习新 API,并立即开始工作。 此次版本更新带来如下改

2023-11-04

Deno 1.38 已正式发布。 公告写道,此版本为deno doc命令引入了重大改进,其中包括使用deno doc --html生成静态站点文档的能力。另外改进了 Node.js 兼容性、支持 HMR(模块热更新)。 主要变化 改进deno doc:新的 deno doc --html&nb

2023-09-13

。 Node npm list 是有一个外部依赖视图的。 Bun 有半内置的 REPL,需要时会进行下载。 所有运行时都在不同程度上提供了 ARM64 支持,其中 Node.js 支持的平台范围最广。 尽管 Deno 缺少传统的内置包管理器,但它可以通过

2023-02-27

eScript 的运行时,它使用 V8 并以 Rust 构建。 Deno 1.31 正式发布,值得关注的更新包括: 支持package.json Deno 现在会自动检测到 package.json 并使用它来安装和解决使用的依赖关系 Node-API 的稳定化 Deno 1.31 稳定了 Node-API(

2023-03-24

eScript 的运行时,它使用 V8 并以 Rust 构建。 Deno 1.32 正式发布,值得关注的更新包括: 增强 Node.js 的兼容性 Deno 在提高与 Node.js 的兼容性方面继续取得重大进展,提供了更顺畅的整体开发者体验。这个版本的主要改进包括:

2022-10-29

Deno 1.27 已正式发布。 主要变化 改进语言服务器 /IDE 改进 npm 兼容性 新增navigator.language Web API 改进 deno task 升级检查器 修改 Deno APIs 升级 deno lint V8 10.8 改进 Node.js 兼容性 修改标准库 API

2023-05-02

Deno 1.33 已发布。与此同时,官方宣布了 Deno 2 的消息,称将于未来几个月内发布,并介绍了关于此版本的开发目标: 提升编码效率:无论是删除配置、样板代码还是构建步骤,团队都在持续让开发者轻松地深入研究代码并立

2023-12-16

Deno的1.39版本发布标志着该平台的一个重要更新,其中包含多项引人注目的改进和新特性。 WebGPU的回归 Deno 1.39重新引入了WebGPU API的支持,这一决定标志着对于高性能、跨架构的GPU编程在JavaScript中的重要进展。WebGPU API,被视为

2022-06-23

Deno 运行时背后的同名开发商 Deno 于昨日宣布,它已完成了由红杉领导的 2100 万美元的 A 轮融资,使其融资总额达到 2600 万美元。Deno 首席执行官 Ryan Dahl 表示,此轮融资将帮助他们用于构建 Deno 的商业产品 —— Deno Deploy,并同

2022-11-17

TypeScript 的运行时,它使用 V8 并以 Rust 构建。 Deno 1.28 已发布,值得关注的更新包括: npm Deno 1.28 稳定了 npm 兼容性,这意味着你现在可以在 Deno 中导入超过 130 万个 npm 模块。构建应用程序将比以往更容易、更安全,现在你可

2022-08-29

TypeScript 的运行时,它使用 V8 并以 Rust 构建。 Deno 1.25 已发布,值得关注的更新包括: deno init 子命令 用 Deno 启动一个新的项目一直很简单:你只需要一个文件就可以开始了。不需要任何配置文件、依赖清单或构建脚本。来自

2023-08-08

Deno 1.36 已正式发布。 公告写道,Deno 设计目标的核心是灵活且强大的运行时安全性。在 Deno 1.36 中,通过 --deny-* flag 进一步扩展了安全选项。除了现有的 --allow-* flag 之外,开发者还可以配置网络通信、文件系统

2023-05-27

Deno 1.34 已正式发布,主要更新内容是优化与 npm 和 Node.js 的兼容性,从而整体提升开发者体验,并为未来的性能增强奠定基础。 值得关注的变化: deno compile支持 npm 包 从 Deno v1.6 开始, deno compile支持将项目编译成单个

2023-04-08

TypeScript 无构建步骤 支持服务器端渲染和孤岛架构 内置强大的工具,例如 formatter、 linter 和 test runner 支持 npm specifiers Fresh 是面向 JavaScript 和 TypeScript 开发者的全栈现代 Web 框架,可帮助他们轻松创建