docs.rs 现在允许你选择你的构建目标

2020 年 3 月 15 日 · Jynn Nelson 代表 docs.rs 团队

最近,docs.rs 添加了一项功能,允许 crate 选择不构建所有目标。如果你不需要在所有目标上构建,你可以启用此功能来减少构建时间。

这项功能有什么作用?

默认情况下,docs.rs 为发布到 crates.io每个一级目标 构建所有 crate。然而,大多数 crate 在所有目标上都有相同的内容。对于平台相关的 crate,几乎所有都只针对一个平台,并且不需要在其他目标上构建。例如,winapi 仅在 x86_64-pc-windows-msvci686-pc-windows-msvc 目标上具有文档,在所有其他目标上都是空白的。

此功能允许你请求仅在特定目标上构建。例如,winapi 可以通过在其 Cargo.toml 中加入以下内容来选择仅构建 Windows 目标。

[package.metadata.docs.rs]
# This also sets the default target to `x86_64-pc-windows-msvc`
targets = ["x86_64-pc-windows-msvc", "i686-pc-windows-msvc"]

如果你只需要一个目标,那就更简单了

[package.metadata.docs.rs]
# This sets the default target to `x86_64-unknown-linux-gnu`
# and only builds that target
targets = ["x86_64-unknown-linux-gnu"]

查看 docs.rs 文档 了解如何选择加入的更多详情。

这对我的 crate 有什么帮助?

无需为每个一级目标构建,你只需为一个目标构建,将你的文档构建时间减少为原来的六分之一。这对大型 crate 或包含许多需要数小时才能生成文档的 crate 的项目尤其有帮助。

这对 docs.rs 有什么帮助?

构建来自 crates.io 的所有 crate 可能需要很长时间!构建更少的目标将使我们能够减少每个 crate 的等待时间。此外,这将减缓我们存储成本的增长,提高项目的可持续性。

未来可能的变更

我们正在考虑将来默认开启此功能;即,除非明确请求多个目标,否则仅为一个目标构建。然而,我们不想破坏任何人的文档,因此我们在决定迁移策略的同时,将此功能设为选择加入(opt-in)。

这一变更也将使 docs.rs 更容易为非一级目标(例如嵌入式目标)构建文档。

我如何了解更多信息?

你可以在 提出此变更的 issue包含实现的 PR 中了解更多信息。关于构建非一级目标的详情也可在 请求此功能的 issue 中查看。

关于目标以及一级目标的更多信息可在 平台支持 页面中找到。