Deno 1.4 版本说明
今天我们发布了 Deno 1.4.0,这是我们迄今为止最大的功能发布。以下是一些亮点
- Web 标准 WebSocket API: 您现在可以使用 WebSockets 进行通信,就像在浏览器中一样。
- 文件更改时自动重启: 使用
deno run --watch
启动脚本,以在文件更改时自动重新加载脚本 - 集成测试覆盖率: 使用
deno test --coverage
运行您的测试,以获取测试覆盖率的摘要
如果您已经安装了 Deno,可以通过运行 deno upgrade
升级到 1.4。如果您是第一次安装 Deno,可以使用以下方法之一
# Using Shell (macOS and Linux):
curl -fsSL https://deno.land/x/install/install.sh | sh
# Using PowerShell (Windows):
iwr https://deno.land/x/install/install.ps1 -useb | iex
# Using Homebrew (macOS):
brew install deno
# Using Scoop (Windows):
scoop install deno
# Using Chocolatey (Windows):
choco install deno
新功能和更改
WebSocket API
此版本添加了对 web 标准 WebSocket API
的支持,该 API 可在所有现代浏览器中使用。它可用于通过 WebSocket 协议与远程服务器通信。
以下是一个简短的示例,说明它的工作原理
// Start the connection to the WebSocket server at echo.websocket.org
const ws = new WebSocket("ws://echo.websocket.org/");
// Register event listeners for the open, close, and message events
ws.onopen = () => {
console.log("WebSocket ready!");
// Send a message over the WebSocket to the server
ws.send("Hello World!");
};
ws.onmessage = (message) => {
// Log the message we receive:
console.log("Received data:", message.data);
// Close the websocket after receiving the message
ws.close();
};
ws.onclose = () => console.log("WebSocket closed!");
ws.onerror = (err) => console.log("WebSocket error:", err.error);
// When running this the following is logged to the console:
//
// WebSocket ready!
// Received data: Hello World!
// WebSocket closed!
您可以在本地尝试它:deno run --allow-net=echo.websocket.org https://deno.org.cn/blog/v1.4/websocket.js
此版本还从 std/ws
中删除了 websocket 连接方法。改用 WebSocket API
。
deno run --watch
Deno 现在有一个集成的文件监视器,可用于在任何依赖项更改时重新启动脚本。
要使用它,像往常一样运行您的脚本,但添加 --watch
标志。您还需要添加 --unstable
标志,因为此功能尚不稳定。
$ echo "console.log('Hello World!')" > mod.ts
$ deno run --watch --unstable mod.ts
Check file:///home/deno/mod.ts
Hello World
Watcher Process terminated! Restarting on file change...
# now run `echo "console.log('File watching works!')" > ./mod.ts` in a different terminal
Watcher File change detected! Restarting!
Check file:///home/deno/mod.ts
File watching works!
Watcher Process terminated! Restarting on file change...
watch 标志不接受要监视的目录或文件的参数。相反,它会自动确定脚本的所有本地导入,并监视它们。
目前文件监视仅支持 deno run
,但将来还会添加到 deno test
和可能的其他子命令中。
deno test --coverage
您现在可以使用 deno test
的 --coverage
标志查找未被测试覆盖的代码。启用后,将在所有测试运行完成后打印每个文件的代码覆盖率摘要。您还需要添加 --unstable
标志,因为此功能尚不稳定。
$ git clone [email protected]:denosaurs/deno_brotli.git && cd deno_brotli
$ deno test --coverage --unstable
Debugger listening on ws://127.0.0.1:9229/ws/5a593019-d185-478b-a928-ebc33e5834be
Check file:///home/deno/deno_brotli/.deno.test.ts
running 2 tests
test compress ... ok (26ms)
test decompress ... ok (13ms)
test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out (40ms)
test coverage:
file:///home/deno/deno_brotli/mod.ts 100.000%
file:///home/deno/deno_brotli/wasm.js 100.000%
目前唯一可用的输出格式是文本摘要。将来会添加其他输出格式,例如 lcov
和 json
。
--unstable
中更严格的类型检查
对于所有使用 --unstable
的用户,isolatedModules
和 importsNotUsedAsValues
TypeScript 编译器选项现在默认情况下将被启用。我们将来会为所有人默认启用这些标志。这些标志在 TypeScript 编译器中启用了某些更严格的检查,这可能会导致一些您以前从未见过的错误
ERROR TS1205: Re-exporting a type when the '--isolatedModules' flag is provided requires using 'export type'.
ERROR TS1371: This import is never used as a value and must use 'import type' because the 'importsNotUsedAsValues' is set to 'error'.
这些错误发生在导入或重新导出接口或类型别名时。要修复错误,请将您的导入和重新导出更改为使用 import type
和 export type
。示例
// Bad
import { MyType } from "./mod.ts";
export { MyType } from "./mod.ts";
// Good
import type { MyType } from "./mod.ts";
export type { MyType } from "./mod.ts";
deno info
改进
此更新对用于执行依赖项分析的 deno info
工具进行了重大改进。它现在更快且错误更少。此外,现在还会显示依赖项的文件大小,这使得确定哪些依赖项向您的项目添加了大量代码变得非常容易。
在 console.log 中使用 CSS 样式
大多数现代浏览器支持使用 CSS 为 console.log
消息设置样式。为了尽可能地兼容 web,Deno 现在也支持 console.log
的 CSS 样式。
要设置消息的样式,请在您的消息中添加 %c
格式参数,并将要应用的样式指定为 console.log
的参数
console.log("%cStop!", "color:red;font-weight:bold");
// This will print a bold red `Stop!` to the console.
Deno 支持 color
、background-color
、font-weight
、font-style
、text-decoration-color
和 text-decoration-line
CSS 属性。对这些属性以及自定义 rgb、hex 和 hsl 颜色的支持取决于您的终端对 ANSI 的支持。
查看源代码:https://deno.org.cn/blog/v1.4/rainbow.js
在此版本中,我们添加了对最终规则的支持,这些规则是使 deno lint
规则与推荐的 eslint
和 typescript-eslint
规则集保持一致所需的。这意味着 deno lint
应该能够捕获 @eslint/recommended
和 @typescript-eslint/recommended
可以捕获的所有错误。(以快几个数量级的性能。)这是 deno lint
稳定化的一个重要步骤。
deno doc
更新
deno doc
和 https://doc.deno.land 在此版本中也获得了一系列新功能和修复。添加了对 export { foo };
语法的支持(在声明之后导出语句),并且现在支持使用相同名称的多个符号的重新导出。
要试用这些新功能,只需浏览 https://doc.deno.land 上的任何模块。它已经使用新版本进行了更新。
deno.land/std 中的更改
在此版本中,writeJson
、writeJsonSync
、readJson
和 readJsonSync
函数已从 https://deno.land/std/fs 中删除。您可以轻松地用以下函数替换它们
- const accounting = await readJson("accounting.json");
+ const accounting = JSON.parse(await Deno.readTextFile("accounting.json"));
- const accounting = readJsonSync("accounting.json");
+ const accounting = JSON.parse(Deno.readTextFileSync("accounting.json"));
- await writeJson("hello_world.json", { "hello": "world" });
+ await Deno.writeTextFile("hello_world.json", JSON.stringify({ "hello": "world" }));
- writeJsonSync("hello_world.json", { "hello": "world" });
+ Deno.writeTextFileSync("hello_world.json", JSON.stringify({ "hello": "world" }));
deno_core
Rust API 的更改
Deno 的基础子系统 `deno_core` 随着我们改进 CLI 不断发展。在 0.57.0 中,我们已将 `CoreIsoate` 和 `EsIsolate` 合并到名为 `JsRuntime` 的单个结构体中。此外,还公开了更易于创建操作的工具。查看 示例,了解这些 API 如何协同工作。
VS Code 扩展更新
最近,Deno 的 VS Code 扩展 发布了一些主要的功能更新。以下是一个简要总结。
远程 URL IntelliSense
扩展的一个很棒的新功能是针对 deno.land 导入的 IntelliSense。它为您提供 deno.land/x 上模块名称、所有版本及其完整目录列表的自动完成建议。所有这些都无需实际下载模块源代码,而是由 deno.land/x 的最新更新 提供支持。
deno lint
诊断
内联 deno lint
现在已与扩展完全集成。要启用它,只需在扩展中将 `deno.unstable` 和 `deno.lint` 设置设置为 `true`。执行此操作后,您将获得代码的实时内联诊断。
完整的发布说明(包括错误修复)可在 https://github.com/denoland/deno/releases/tag/v1.4.0 找到。