如何在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
相关产品推荐
相关产品推荐

