不穩定的 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 不遵循 semver,並且可能會在 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"]