我正在开发一套供个人使用的图书馆箱。我想在我的几个项目中重用它们。我不想将库或最终项目发布到互联网上的任何地方,因为它们仅供我个人使用(大学任务)。
我不喜欢指定
path
依赖项,因为路径可能如下所示:../../../library-crates/project
。所以path
依赖不是一个选项对我来说!
虽然工作区非常适合一组密切相关的项目,但它们不符合大学中按主题分隔项目的想法。每个主题都已经有专门的工作空间和一组合适的板条箱。
我知道
path
依赖性。我在工作区中使用它们。但就我而言,它们不适合指定工作区外部的依赖项。
源替换听起来不错,但官方文档只提到了vendoring,即将外部依赖项复制到本地注册表或目录。他们没有提到如何将本地开发的、未发布的板条箱添加到本地注册表中。
其他一些生态系统支持本地注册表的概念,即:maven、npm。它们允许您将自己的“本地开发”包添加到本地注册表。稍后您可以在其他项目中将这些包作为常规依赖项重用,而无需指定晦涩的路径。 Cargo确实支持本地注册表的概念,但它需要索引文件。该文件暗示了一些配置。根据官方文档,
local-registry
格式用于通过网络进行镜像。
期望
您可以将自己未发布的 crate 添加到本地注册表。我们先来配置一下吧。
本地注册表配置
mkdir ~/cargo-local
然后为cargo-io 配置源覆盖。配置文件应位于
~/.cargo/config.toml
:
[source.local]
directory = "cargo-local"
[source.crates-io]
replace-with = "local"
replace-with
指示货物首先在我们的
local
源中查找依赖项(注意,该名称local
可以替换为任意名称),然后才继续进行货物注册。directory
告诉货物在哪里寻找本地注册表,并且注册表是普通目录。
注意,相对directory
路径是相对于
目录解析的,即包含../
文件夹的目录! 下一步是将本地开发的库添加到本地注册表。 Cargo.cargo
vendor
命令不适合于此,因为它仅复制项目的依赖项,而不复制项目本身。 从板条箱的根(不是板条箱的工作区根)执行以下操作:
echo "{files:{}}" > .cargo-checksum.json
cp -r . ~/cargo-local
我们必须自己添加
.cargo-checksum.json
文件。其内容应如下:
{"files":{}}
此步骤由上面的echo ...
命令完成!!!
Cargo 要求此文件始终包含至少如上所述的内容。最后,照常添加对其他项目的依赖:
[dependencies]
local-package = "0.1.0"