不稳定 API

浏览器通常会在 Web API 规范仍在编写过程中实现部分 API。随着规范的不断发展,API 可能需要频繁更改,因此 WebIDL 相对不稳定。

这给 `web-sys` 带来了挑战,因为它意味着每当 WebIDL 发生变化时,`web-sys` 都必须进行破坏性 API 更改。这也意味着之前发布的 `web-sys` 版本将失效,因为浏览器 API 可能已更改以匹配更新的 WebIDL。

为了避免不稳定 API 的频繁破坏性更改,`web-sys` 通过一个类似于以下的属性隐藏所有不稳定 API

#![allow(unused)]
fn main() {
#[cfg(web_sys_unstable_apis)]
pub struct Foo;
}

通过属性隐藏不稳定 API,需要 crate 明确选择加入这些降低的稳定性保证才能使用这些 API。具体来说,这些 API 不遵循语义化版本控制,并且可能在 WebIDL 发生变化时随时发生变化。

crate 可以通过传递 `cfg` 标志 `web_sys_unstable_apis` 在编译时选择加入不稳定 API。

通常使用 `RUSTFLAGS` 环境变量来执行此操作。例如

RUSTFLAGS=--cfg=web_sys_unstable_apis cargo run

或者,您可以创建一个 cargo 配置文件 来设置其 rustflags

在 `./.cargo/config.toml` 中

[build]
rustflags = ["--cfg=web_sys_unstable_apis"]