本页内容
不稳定特性标志
Deno 运行时的新功能通常在特性标志(feature flags)后发布,以便用户在这些 API 和功能最终确定之前进行尝试。当前不稳定的特性标志列在此页面上,也可以通过运行以下命令在 CLI 帮助文本中找到
deno --help
在命令行使用标志 跳转到标题
当你从命令行运行 Deno 程序时,可以通过将标志作为选项传递给 CLI 来启用特性标志。以下是启用 --unstable-node-globals
标志运行程序的示例
deno run --unstable-node-globals main.ts
在 deno.json
中配置标志 跳转到标题
你可以使用 deno.json 中的配置选项来指定你想要为项目启用的不稳定特性。
{
"unstable": ["bare-node-builtins", "webgpu"]
}
unstable
数组中可能的值是移除了 --unstable-
前缀的标志名称。
通过环境变量配置 跳转到标题
有些标志可以通过为给定名称的环境变量设置一个值(任何值)来启用,而不是作为标志或 deno.json
配置选项传递。可以通过环境变量设置的标志将在下面注明。
以下是通过环境变量设置 --unstable-bare-node-builtins
标志的示例
export DENO_UNSTABLE_BARE_NODE_BUILTINS=true
--unstable-bare-node-builtins
跳转到标题
环境变量: DENO_UNSTABLE_BARE_NODE_BUILTINS
此标志允许你 导入 Node.js 内置模块,而无需使用 node:
说明符,如下面的示例所示。如果你手动管理 Node.js 依赖项,也可以使用此标志启用不带 npm:
说明符的 npm 包(参见 byonm
标志)。
import { readFileSync } from "fs";
console.log(readFileSync("deno.json", { encoding: "utf8" }));
--unstable-detect-cjs
跳转到标题
环境变量: DENO_UNSTABLE_DETECT_CJS
在以下额外场景中,将 .js
、.jsx
、.ts
和 .tsx
模块加载为可能是 CommonJS 模块:
- package.json 没有
"type"
字段。 - 不存在 package.json 文件。
默认情况下,Deno 仅在你处于包含 package.json 的项目中,并且最近的 package.json 包含 { "type": "commonjs" }
时,才将这些模块加载为可能是 CommonJS 模块。
需要 Deno >= 2.1.2
--unstable-node-globals
跳转到标题
此标志将 Node 特定的全局变量注入到全局作用域。注入的全局变量包括:
Buffer
global
setImmediate
clearImmediate
请注意,从 Deno 2.0 开始,process
已作为全局变量可用。
需要 Deno >= 2.1.0
--unstable-sloppy-imports
跳转到标题
环境变量: DENO_UNSTABLE_SLOPPY_IMPORTS
此标志启用了从不包含文件扩展名的导入中推断文件扩展名的行为。通常,下面的 import 语句会产生错误
import { Example } from "./bar";
console.log(Example);
export const Example = "Example";
启用宽松导入(sloppy imports)后执行脚本将消除错误,但会提供应使用更具性能的语法的指导。
宽松导入(sloppy imports)将允许(但会打印警告)以下行为:
- 从导入中省略文件扩展名
- 使用不正确的文件扩展名(例如,当实际文件是
.ts
时,使用.js
扩展名进行导入) - 导入目录路径,并自动使用
index.js
或index.ts
作为该目录的导入
deno compile
不支持宽松导入。
--unstable-unsafe-proto
跳转到标题
出于安全原因,Deno 有意决定不支持 Object.prototype.__proto__
。然而,仍有许多 npm 包依赖此属性才能正常工作。
此标志启用此属性。请注意,不建议使用此属性,但如果你确实需要使用依赖它的包,现在可以使用此“逃生舱口(escape hatch)”。
--unstable-webgpu
跳转到标题
在全局作用域中启用 WebGPU
API,与在浏览器中一样。下面是使用此 API 获取 GPU 基本信息的简单示例
// Try to get an adapter from the user agent.
const adapter = await navigator.gpu.requestAdapter();
if (adapter) {
// Print out some basic details about the adapter.
const adapterInfo = await adapter.requestAdapterInfo();
// On some systems this will be blank...
console.log(`Found adapter: ${adapterInfo.device}`);
// Print GPU feature list
const features = [...adapter.features.values()];
console.log(`Supported features: ${features.join(", ")}`);
} else {
console.error("No adapter found");
}
请查看 此仓库 以获取更多使用 WebGPU 的示例。
--unstable-broadcast-channel
跳转到标题
启用此标志后,即可在全局作用域中使用 BroadcastChannel
web API,与在浏览器中一样。
--unstable-worker-options
跳转到标题
启用不稳定的 Web Worker API 选项。具体来说,它允许你指定 worker 可用的权限
new Worker(`data:application/javascript;base64,${btoa(`postMessage("ok");`)}`, {
type: "module",
deno: {
permissions: {
read: true,
},
},
}).onmessage = ({ data }) => {
console.log(data);
};
--unstable-cron
跳转到标题
启用此标志后,即可在 Deno
命名空间上使用 Deno.cron
API。
--unstable-kv
跳转到标题
启用此标志后,即可在 Deno
命名空间中使用 Deno KV API。
--unstable-net
跳转到标题
启用不稳定的网络 API。这些 API 包括:
--unstable-otel
跳转到标题
--unstable
跳转到标题
--unstable
标志不再用于新功能,并将在未来的版本中移除。所有通过此标志可用的不稳定功能现在都作为更细粒度的不稳定标志提供,特别是
--unstable-kv
--unstable-cron
请今后改用这些特性标志。
在 Deno 的较新版本(1.38+)之前,不稳定 API 是通过 --unstable
标志一次性提供的。值得注意的是,Deno KV 和其他云原生 API 都在此标志后可用。要运行一个可以访问这些不稳定功能的程序,你需要使用以下命令运行你的脚本:
deno run --unstable your_script.ts
建议你使用更细粒度的不稳定标志而不是此标志,--unstable
标志现已弃用,并将在 Deno 2 中移除。