Rust 如何在同一回购协议中组织多个构建

Rust 如何在同一回购协议中组织多个构建,rust,rust-cargo,Rust,Rust Cargo,我是新手,正在尝试玩web组装 我已经用红豆杉创建了一个简单的应用程序,它使用trunk构建,正如预期的那样。 然后,我使用actix创建了一个简单的html服务器,这也证实了它可以按预期工作 我遇到的问题是,如果actix包包含在货物依赖项中,wasm构建就会失败(这似乎是合理的——当然是在浏览器构建上下文中) 我不希望将其拆分为多个板条箱-至少在我进行原型设计时是这样,所以我希望有一种方法可以设置2个构建管道或使依赖项有条件-寻找如何最好地做到这一点的建议 项目设置如下所示: Cargo.t

我是新手,正在尝试玩web组装

我已经用红豆杉创建了一个简单的应用程序,它使用trunk构建,正如预期的那样。 然后,我使用actix创建了一个简单的html服务器,这也证实了它可以按预期工作

我遇到的问题是,如果actix包包含在货物依赖项中,wasm构建就会失败(这似乎是合理的——当然是在浏览器构建上下文中)

我不希望将其拆分为多个板条箱-至少在我进行原型设计时是这样,所以我希望有一种方法可以设置2个构建管道或使依赖项有条件-寻找如何最好地做到这一点的建议

项目设置如下所示:

Cargo.toml
dist/
src/
  frontend.rs # call to frontend code from non-main function
  main.rs # fn main() here - can be empty function for the frontend
  frontend/
    mod.rs
    app.rs # no actix dependency
  shared/
    mod.rs
    shared.rs # no actix dependency
  server/
    mod.rs
    server.rs # this has the actix dependency
目前我的情况是,以下cargo.toml和main将运行前端:

main.rs:

fn main() {}
mod server;

fn main() -> std::io::Result<()> {
    server::server::serve()
}

Cargo.toml:

[dependencies]
seed = "0.8.0"
external_shared_stuff = "0.2.0"
[dependencies]
seed = "0.8.0" //not required but no issue - would prefer it wasnt included
external_shared_stuff = "0.2.0"
actix-web = "3"
以下内容将运行服务器:

main.rs:

fn main() {}
mod server;

fn main() -> std::io::Result<()> {
    server::server::serve()
}

我目前使用trunk为前端构建/服务,并为服务器运行货物。配置它以使两个构建都能工作的最佳方法是什么?我可以在不复制共享依赖项的情况下进行配置吗?是否有可能使依赖项以构建目标为条件

提前谢谢你的帮助

我希望有办法。。。使依赖项有条件

有关在
Cargo.toml
中配置条件依赖项的信息,请参阅。在您的情况下,您可能需要以下内容:

[依赖项]
seed=“0.8.0”
外部共享内容=“0.2.0”
[target.cfg(非(target_arch=“wasm32”))”。依赖项]
actix web=“3”

即使您正在制作原型,我也强烈建议您使用不同的板条箱,以不同的方式组织。建立一个由多个板条箱使用的共享库并不难。是的,我确实有点像逆流而上的感觉——但如果一切按计划进行,90%的项目将是共享代码和DEP,而且版本需要排队才能正常工作,所以分裂似乎会造成不必要的复杂性-如果可能的话,我宁愿暂时避免。谢谢你,我现在就看一看。你知道有没有办法在main.rs中提供类似的指令(例如,我可以为每个构建都提供一个指令)请看,你可以使用
#[cfg(…)]
属性来启用和禁用项目。超级明星-感谢指针yip,工作起来很有魅力-再次感谢-现在他们必须互相交谈:)