Como conectar um crate Rust local antes da publicação: guia passo a passo

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Introdução: por que um crate local não é um luxo, mas uma necessidade

\n\n

Imagine: você está escrevendo em Rust uma biblioteca para analisar arquivos de configuração. Ela ainda está crua, não pronta para publicação no crates.io, mas você já quer testá-la em um projeto real — um servidor web em Actix ou um utilitário CLI. O que fazer? Copiar o código? Criar um monorepositório? Não, em Rust existe uma solução elegante para isso — o crate local não publicado.

\n\n

A pergunta "How to use a local unpublished crate?" reuniu milhares de visualizações no Stack Overflow. Não é por acaso: todo desenvolvedor Rust, mais cedo ou mais tarde, enfrenta a necessidade de conectar seu próprio crate que ainda não foi lançado. Neste artigo, abordaremos todas as formas — desde a simples indicação do caminho até o trabalho com dependências Git e workspaces. Vamos lá!

\n\n

O que é um unpublished crate e para que serve?

\n\n

Unpublished crate (crate não publicado) é um pacote Rust que existe apenas no seu disco local ou em um repositório privado. Ele não está carregado no crates.io e não está disponível para outros desenvolvedores (a menos que você lhes dê acesso aos arquivos).

\n\n

Cenários típicos de uso:

\n
    \n
  • Desenvolvimento de uma biblioteca em paralelo com o projeto principal
  • \n
  • Refatoração: você separa parte do código em um crate separado
  • \n
  • Bibliotecas corporativas privadas que não podem ser publicadas
  • \n
  • Teste de dependências antes da publicação
  • \n
\n\n

A principal vantagem é que você obtém controle total sobre o código e pode fazer alterações instantaneamente, sem esperar pela publicação no crates.io.

\n\n

Método 1: Path dependency — o mais simples e rápido

\n\n

Este é o método básico, adequado quando ambos os projetos (dependência e dependente) estão no seu computador.

\n\n

Estrutura do projeto

\n\n

Suponha que você tenha a seguinte estrutura de pastas:

\n\n
my_project/\n├── my_lib/          # unpublished crate\n│   ├── Cargo.toml\n│   └── src/\n│       └── lib.rs\n└── my_app/          # projeto principal\n    ├── Cargo.toml\n    └── src/\n        └── main.rs
\n\n

Passo 1: Criar a biblioteca my_lib

\n\n

Dentro de my_lib/Cargo.toml:

\n\n
[package]\nname = "my_lib"\nversion = "0.1.0"\nedition = "2021"\n\n[dependencies]
\n\n

Em my_lib/src/lib.rs escrevemos uma função simples:

\n\n
pub fn greet(name: &str) -> String {\n    format!("Olá, {}! Este é um crate local.", name)\n}
\n\n

Passo 2: Conectar my_lib em my_app via path

\n\n

Em my_app/Cargo.toml adicionamos a seção [dependencies]:

\n\n
[package]\nname = "my_app"\nversion = "0.1.0"\nedition = "2021"\n\n[dependencies]\nmy_lib = { path = "../my_lib" }
\n\n

Observe: o caminho é indicado em relação ao arquivo Cargo.toml do projeto principal. Se a biblioteca estiver em outro diretório, indique o caminho absoluto ou relativo.

\n\n

Passo 3: Usar o crate no código

\n\n

Em my_app/src/main.rs:

\n\n
use my_lib::greet;\n\nfn main() {\n    let message = greet("Alexandre");\n    println!("{}", message);\n}
\n\n

Execute: cargo run — e veja a saída: "Olá, Alexandre! Este é um crate local."

\n\n

Importante! Quaisquer alterações em my_lib serão automaticamente captadas na próxima compilação de my_app. Não é necessário reinstalar ou atualizar versões.

\n\n

Método 2: Dependências Git — para trabalho em equipe

\n\n

Se você trabalha em equipe ou armazena o código no Git, é melhor usar dependências Git. Isso é conveniente quando o crate está em um repositório separado (mesmo privado).

\n\n

Configuração

\n\n

Suponha que seu crate não publicado my_lib esteja no repositório https://github.com/seunome/my_lib.git

Blogs

Book Recommendations