如何将本地包添加到 Cargo 中的本地注册表?

问题描述 投票:0回答:1

我正在开发一套供个人使用的图书馆箱。我想在我的几个项目中重用它们。我不想将库或最终项目发布到互联网上的任何地方,因为它们仅供我个人使用(大学任务)。
我不喜欢指定

path
依赖项,因为路径可能如下所示:
../../../library-crates/project
。所以
path
依赖不是一个选项对我来说

尝试过

虽然工作区非常适合一组密切相关的项目,但它们不符合大学中按主题分隔项目的想法。每个主题都已经有专门的工作空间和一组合适的板条箱。

我知道

path
依赖性。我在工作区中使用它们。但就我而言,它们不适合指定工作区外部的依赖项。

源替换听起来不错,但官方文档只提到了vendoring,即将外部依赖项复制到本地注册表或目录。他们没有提到如何将本地开发的、未发布的板条箱添加到本地注册表中。

其他一些生态系统支持本地注册表的概念,即:maven、npm。它们允许您将自己的“本地开发”包添加到本地注册表。稍后您可以在其他项目中将这些包作为常规依赖项重用,而无需指定晦涩的路径。 Cargo确实支持本地注册表的概念,但它需要索引文件。该文件暗示了一些配置。根据官方文档,

local-registry

格式用于通过网络进行镜像。

期望

我期待一些简单的方法来在其他本地包中重用本地开发的库,分布在不同的工作空间中。

rust dependencies local vendor cargo
1个回答
0
投票

您可以将自己未发布的 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"

© www.soinside.com 2019 - 2024. All rights reserved.