网站首页 > 技术教程 正文
大家好,很高兴又见面了,我是"高级前端?进阶?",由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发,您的支持是我不断创作的动力。
前言
Deno 设计目标的核心是灵活且强大的运行时安全性。 在 Deno 1.36 中,通过 --deny-* 标志进一步扩展安全选项。 除了现有的 --allow-* 标志之外,开发者现在还可以配置 Web 通信、文件系统访问和其他潜在敏感 API 的允许和拒绝列表。
除了这些安全功能之外,开发者还将在 1.36 中发现改进的测试和基准测试 API、更强大的 Node.js 和 npm 包支持、语言服务器改进等等。
如果安装了 Deno,则可以在终端中使用以下命令升级到版本 1.36:
curl -fsSL https://deno.land/x/install/install.sh | sh
// 安装
deno upgrade
// 升级
Deno 程序更灵活的安全选项
Deno 运行时默认提供安全性,使开发人员能够选择让代码和依赖项发出 Web 请求、访问文件系统或使用 --allow-* CLI 标志的其他潜在危险 API。
这些选项现在仍然很有用,但在某些情况下有点不灵活。 开发者可以让程序不受限制地访问给定功能,或者必须配置 --allow-_ 选项将启用的特定域或目录。 无法仅排除某些域或文件路径来打开沙箱。 在 Deno 1.36 中,引入了 --deny-_ 系列运行时标志,为 Deno 程序启用更灵活的权限。
例如,如果希望程序能够访问想要的任何 URL,除了一些特定的 IP 地址和域之外,可以使用:
$ deno run --allow-net --deny-net=api.evil.com mod.ts
例如,如果想让程序访问整个文件系统(/etc 目录除外):
$ deno run --allow-read --deny-read=/etc --allow-write --deny-write=/etc mod.ts
以前具有 --allow-_ 选项的每个 CLI 标志现在也将具有相应的 --deny-_ 选项。 拒绝标志的优先级高于允许标志,因此如果在相同的域或文件路径上使用两者,访问仍将被拒绝:
$ deno run --allow-read=foo.txt --deny-read=foo.txt mod.ts
error: PermissionDenied: Requires read access to "foo.txt"...
扩展的测试和基准测试选项
Deno 1.36 引入了对应用程序中的测试和基准测试的改进。 在测试方面,开发者可以使用新的自定义格式化程序输出 deno 测试运行的结果。
JUnit Report
拥有机器可读的测试报告对于测试的自动化 QA 和保持大型代码库的可维护性至关重要。 JUnit XML 格式可以被 GitLab、CircleCI、Jenkins 或 BuildPulse 等许多服务本机使用。
从 Deno 1.36 开始,开发者可以将 --formatter=junit 标志传递给 Deno test 来获取结构化报告数据:
# Print a JUnit report to the terminal so you can process it further…
$ deno test --reporter=junit
# …or write it directly to a file alongside the default human-readable output.
deno test --junit-path=test_report.xml
Dot reporter
对于喜欢简短测试报告的人,添加了一个点报告器,它提供了简洁的输出,消除了很多噪音。
deno test --reporter=dot
node:test polyfill
如果从最新版本的 Node.js 转向 Deno,那么除了标准库中的 Deno.test 或 describe/it API 之外,开发者还可以使用 Node 20 中的内置测试 API。
可以使用如下所示的简单测试工具在 Deno 中亲自检查一下。
import assert from "node:assert";
import test from "node:test";
test("synchronous passing test", (t) => {
// This test passes because it does not throw an exception.
assert.strictEqual(1, 1);
});
test("asynchronous passing test", async (t) => {
// This test passes because the Promise returned by the async
// function is not rejected.
assert.strictEqual(1, 1);
});
deno bench 改进
通过 Deno.bench 中添加的新功能,Deno 基准测试的粒度和精度得到了提高。
在 Deno 的早期版本中,由于一种称为“JIT 偏差”的现象,Deno.bench 函数在第一次基准测试运行时给出了令人惊讶的结果 ,V8 引擎过度优化基准函数,然后放弃对后续函数的优化 ,导致结果不具有代表性。 现在,通过在用户定义的工作台案例之前运行“预热(warmup)”函数,该问题已得到解决。
此外,开发者现在可以使用 Deno.BenchContext.start 和 Deno.BenchContext.end 告诉基准测试工具想要测量的关键部分。 这两次调用之间的部分之外的所有内容都将被排除在测量之外。
import { readAll } from "https://deno.land/std@0.197.0/streams/mod.ts";
Deno.bench("foo", async (b) => {
// Open a file that we will act upon.
const file = await Deno.open("a_big_data_file.txt");
// Tell the benchmarking tool that this is the only section you want
// to measure.
b.start();
// Now let's measure how long it takes to read all of the data from the file.
await readAll(file);
// End measurement here.
b.end();
// Now we can perform some potentially time-consuming teardown that will not
// taint out benchmark results.
file.close();
});
Deno 1.36 还更新了 deno 基准输出,以包含有关每秒迭代次数的信息:
Node.js 兼容性改进
从 npm 运行未配置为二进制文件的脚本
现在,开发者可以从未在 package.json 中的包 bin 属性中配置的 npm 包运行脚本。例子:
deno run -A npm:somepackage@0.0.1/foo/cli.mjs
process.dlopen 可用
开发者现在可以使用 process.dlopen API 加载 Node.js 的本机插件。
AsyncLocalStorage 速度提高 3.5 倍
Deno 1.36 优化了 Node:async_hooks 模块中 AsyncLocalStorage 的实现,基准测试显示,它比 Deno v1.35.3 快 3.5 倍。
node:os 完全 polyfill
Node.js os 模块的 getPriority、setPriority 和 userInfo 函数现已可用,使得 node:os 模块完全被 pollyfilled。
import { getPriority } from "node:os";
console.log(getPriority());
其他改进
deno compile --no-terminal
新的 --no-terminal 标志现在可以与 deno 编译一起使用。 如果编译的二进制文件在 Windows 上运行,此标志将阻止打开终端窗口。
Deno.createHttpClient.allowHost
不稳定的 Deno.createHttpClient 现在支持 allowedHost 选项,从而可以为获取请求指定 Host 标头。
const client = Deno.createHttpClient({
allowHost: true,
});
const res = await fetch("http://example.com", {
headers: {
host: "myhost.com",
},
client,
});
允许 WebSocket API 中的 HTTP(S) URL
开发者现在可以在 WebSocket Web API 中使用 http: 和 https: URL,Deno 会自动调整协议以分别使用 ws: 或 wss::
const url = new URL("https://example.com");
const ws = new WebSocket(url);
console.log(ws.url);
// wss://example.com
重试失败的模块下载
Deno 现在在下载依赖项时更具弹,由于远程服务器上的间歇性连接问题或虚假错误,连接到远程主机总是会失败。
在这种情况下,Deno 将等待一小段时间并重试下载,从而使 CI 管道更加可靠并减少重新运行命令的需要。
Deno.Command API 中更多有用的错误
在 1.36 之前,如果开发者尝试为 Deno.Command 中不存在的二进制文件生成子进程,则会显示一条无用的错误消息:
$ deno
> new Deno.Command("this-binary-does-not-exist").spawn();
Uncaught NotFound: No such file or directory (os error 2)
at spawnChildInner (ext:runtime/40_process.js:162:17)
at spawnChild (ext:runtime/40_process.js:182:10)
at Command.spawn (ext:runtime/40_process.js:440:12)
at <anonymous>:2:48
在 Deno 1.36 中,错误消息将包含未找到的二进制文件的名称:
$ deno
> new Deno.Command("this-binary-does-not-exist").spawn();
Uncaught NotFound: Failed to spawn: this-binary-does-not-exist: No such file or directory (os error 2)
at spawnChildInner (ext:runtime/40_process.js:162:17)
at spawnChild (ext:runtime/40_process.js:182:10)
at Command.spawn (ext:runtime/40_process.js:440:12)
at <anonymous>:2:48
LSP 改进
Deno 1.36 包含对 LSP 的大量修复和改进。 这应该会让 Deno 与支持 LSP(如 Visual Studio Code)的编辑器一起使用变得更加容易。
- 当 Deno 命名空间缺失时更好的诊断
- 自动发现 deno.json 更可靠
- LSP 读取 deno.json 中的“exclude”设置
- node: specifiers 说明符得到正确处理
- 支持符号链接配置文件
参考资料
https://deno.com/blog/v1.36
https://deno.land/manual@v1.36.0/getting_started/installation
猜你喜欢
- 2024-11-10 连铸增强型数字孪生解决方案 连铸新技术介绍
- 2024-11-10 车载激光扫描技术在公路测量中的应用
- 2024-11-10 libtiff4.5版本在VisualStudio2022下的编译
- 2024-11-10 Android composse 声明式UI,更简单的自定义
- 2024-11-10 「翻译」.NET 5 RC1发布 resnet翻译
- 2024-11-10 玩转 jmeter backend listener kafka
- 2024-11-10 influxdb之简介与使用安装 influxdb2.0教程
- 2024-11-10 .NET 6 预览版 7 发布——最后一个预览版
- 2024-11-10 .NET 5.0 RC1 发布,离正式版发布仅剩两个版本
- 2024-11-10 深入了解基于CANoe的VIO系统应用 canoe9.0使用教程
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- sd分区 (65)
- raid5数据恢复 (81)
- 地址转换 (73)
- 手机存储卡根目录 (55)
- tcp端口 (74)
- project server (59)
- 双击ctrl (55)
- 鼠标 单击变双击 (67)
- debugview (59)
- 字符动画 (65)
- flushdns (57)
- ps复制快捷键 (57)
- 清除系统垃圾代码 (58)
- web服务器的架设 (67)
- 16进制转换 (69)
- xclient (55)
- ps源文件 (67)
- filezilla server (59)
- 句柄无效 (56)
- word页眉页脚设置 (59)
- ansys实例 (56)
- 6 1 3固件 (59)
- sqlserver2000挂起 (59)
- vm虚拟主机 (55)
- config (61)
本文暂时没有评论,来添加一个吧(●'◡'●)