You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Rust项目Release模式下禁用测试用开发依赖feature?

如何在Release构建时排除开发依赖的特定Feature

针对你遇到的Release构建时仍编译dev-dependencies中sea-orm的sqlx-sqlite特性问题,有以下几种可行方案:

方案一:使用--no-dev-deps参数构建Release版本

Cargo提供了--no-dev-deps参数,构建时会完全忽略[dev-dependencies]中的配置,这样sea-orm就只会启用[dependencies]里声明的特性,不会包含仅用于测试的sqlx-sqlite。

执行命令:

cargo build --release --no-dev-deps

注意:这个参数会排除所有开发依赖,若你的Release构建不需要任何测试工具、断言库等dev依赖,这是最直接的解决办法。

方案二:通过自定义特性隔离开发依赖的Feature

修改Cargo.toml,将仅用于开发的特性封装到自定义的开发特性组中,避免全局合并特性:

[dependencies.sea-orm]
version = "0.11"
features = ["runtime-tokio-rustls", "sqlx-mysql", "macros"]
default-features = false

[features]
# 定义仅在开发模式下启用的特性组
dev-only = ["sea-orm/sqlx-sqlite"]

[dev-dependencies]
# 将sea-orm设为可选依赖,通过自定义特性启用
sea-orm = { version = "0.11", optional = true }
  • 开发/测试时,手动启用dev-only特性:
    cargo build --features dev-only
    cargo test --features dev-only
    
  • Release构建时,默认不会启用该特性,因此sea-orm不会包含sqlx-sqlite特性,自然不会编译sqlite相关依赖。

方案三:临时重置cargo.lock(临时解决方法)

若你只是偶尔需要优化Release构建速度,可以临时删除cargo.lock文件,再执行Release构建:

rm cargo.lock
cargo build --release

此时Cargo会重新解析依赖,仅包含[dependencies]中的特性,生成不包含dev依赖特性的新cargo.lock。但后续开发时需重新运行cargo build/cargo test来恢复包含dev特性的依赖锁,适合临时场景。

内容的提问来源于stack exchange,提问作者user8641205

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 20:13:23