Einleitung: Warum eine lokale Crate kein Luxus, sondern eine Notwendigkeit ist
\n\nStellen Sie sich vor: Sie schreiben in Rust eine Bibliothek zum Parsen von Konfigurationsdateien. Sie ist noch roh, nicht bereit für die Veröffentlichung auf crates.io, aber Sie möchten sie bereits in einem echten Projekt testen – einem Webserver mit Actix oder einem CLI-Tool. Was tun? Code kopieren? Ein Monorepo erstellen? Nein, in Rust gibt es dafür eine elegante Lösung – die lokale unveröffentlichte Crate.
Die Frage "How to use a local unpublished crate?" hat auf Stack Overflow tausende Aufrufe gesammelt. Das ist kein Zufall: Jeder Rust-Entwickler steht früher oder später vor der Notwendigkeit, seine eigene Crate einzubinden, die noch nicht veröffentlicht wurde. In diesem Artikel werden wir alle Methoden durchgehen – von der einfachen Pfadangabe bis zur Arbeit mit Git-Abhängigkeiten und Workspaces. Los geht's!
\n\nWas ist eine unveröffentlichte Crate und wozu braucht man sie?
\n\nEine unveröffentlichte Crate ist ein Rust-Paket, das nur auf Ihrer lokalen Festplatte oder in einem privaten Repository existiert. Es ist nicht auf crates.io hochgeladen und für andere Entwickler nicht zugänglich (es sei denn, Sie geben ihnen Zugriff auf die Dateien).
Typische Anwendungsszenarien:
\n- \n
- Entwicklung einer Bibliothek parallel zum Hauptprojekt \n
- Refactoring: Sie lagern einen Teil des Codes in eine separate Crate aus \n
- Private Unternehmensbibliotheken, die nicht veröffentlicht werden dürfen \n
- Testen von Abhängigkeiten vor der Veröffentlichung \n
Der Hauptvorteil ist, dass Sie die volle Kontrolle über den Code haben und sofort Änderungen vornehmen können, ohne auf eine Veröffentlichung auf crates.io warten zu müssen.
\n\nMethode 1: Pfadabhängigkeit – die einfachste und schnellste
\n\nDies ist die grundlegende Methode, die geeignet ist, wenn sich beide Projekte (Abhängigkeit und abhängiges Projekt) auf Ihrem Computer befinden.
\n\nProjektstruktur
\n\nAngenommen, Sie haben die folgende Ordnerstruktur:
\n\nmy_project/\n├── my_lib/ # unveröffentlichte Crate\n│ ├── Cargo.toml\n│ └── src/\n│ └── lib.rs\n└── my_app/ # Hauptprojekt\n ├── Cargo.toml\n └── src/\n └── main.rs\n\nSchritt 1: Erstellen der Bibliothek my_lib
\n\nIn my_lib/Cargo.toml:
[package]\nname = "my_lib"\nversion = "0.1.0"\nedition = "2021"\n\n[dependencies]\n\nIn my_lib/src/lib.rs schreiben wir eine einfache Funktion:
pub fn greet(name: &str) -> String {\n format!("Hallo, {}! Dies ist eine lokale Crate.", name)\n}\n\nSchritt 2: Einbinden von my_lib in my_app über den Pfad
\n\nIn my_app/Cargo.toml fügen wir den Abschnitt [dependencies] hinzu:
[package]\nname = "my_app"\nversion = "0.1.0"\nedition = "2021"\n\n[dependencies]\nmy_lib = { path = "../my_lib" }\n\nBeachten Sie: Der Pfad wird relativ zur Cargo.toml-Datei des Hauptprojekts angegeben. Wenn die Bibliothek in einem anderen Verzeichnis liegt, geben Sie einen absoluten oder relativen Pfad an.
Schritt 3: Verwenden der Crate im Code
\n\nIn my_app/src/main.rs:
use my_lib::greet;\n\nfn main() {\n let message = greet("Alex");\n println!("{}", message);\n}\n\nStarten Sie: cargo run – und Sie sehen die Ausgabe: "Hallo, Alex! Dies ist eine lokale Crate."
Wichtig! Alle Änderungen in my_lib werden automatisch beim nächsten Build von my_app übernommen. Sie müssen nichts neu installieren oder Versionen aktualisieren.
Methode 2: Git-Abhängigkeiten – für die Teamarbeit
\n\nWenn Sie im Team arbeiten oder den Code in Git speichern, ist es besser, Git-Abhängigkeiten zu verwenden. Dies ist praktisch, wenn die Crate in einem separaten Repository (auch privat) liegt.
\n\nEinrichtung
\n\nAngenommen, Ihre unveröffentlichte Crate my_lib befindet sich im Repository https://github.com/yourname/my_lib.git