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

如何发布带有子模块依赖的工作区crate-sys至crates.io?

解决Rust工作区中crate-sys发布时包含vendor目录代码的问题

由于crates.io不支持Git子模块,且你的子模块配置在工作区根目录而非crate-sys内部,要让发布到crates.io的crate-sys包含vendor目录的代码,核心思路是将子模块的实际内容嵌入crate-sys仓库,而非依赖子模块引用,具体操作步骤如下:

  • 嵌入子模块内容到crate-sys

    1. 在工作区根目录拉取完整子模块内容:git submodule update --init --recursive
    2. 进入crate-sys/vendor目录,删除其中的.git文件夹(这是子模块的独立仓库标识)
    3. 回到工作区根目录,执行git add crate-sys/vendor,将vendor目录下的所有文件作为普通文件纳入仓库追踪
    4. 提交变更:git commit -m "Embed vendor submodule content into crate-sys"
  • 调整忽略规则与Cargo配置

    1. 检查工作区及crate-sys目录下的.gitignore文件,确保没有忽略vendor目录的规则,若有则删除对应条目
    2. 在crate-sys/Cargo.toml中显式配置include字段,确保vendor目录被包含在发布包内:
      include = [
          "src/**/*",
          "vendor/**/*",
          "Cargo.toml",
          "build.rs"  # 若有构建脚本也需包含
      ]
      
  • 本地验证发布包
    在crate-sys目录下执行cargo package生成本地发布包,再用cargo package --list查看包内文件,确认vendor目录的所有内容都已被包含。如果存在遗漏,检查.gitignore和Cargo.toml的配置后重新验证。

  • 发布到crates.io
    确认本地包内容无误后,执行cargo publish(需提前登录crates.io)完成发布。

后续若原始子模块有更新,需手动拉取最新代码,重复上述嵌入步骤后再发布crate-sys的新版本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 03:10:48