Paketverwaltung der nächsten Generation mit straight.el
Nach einem langen und frustrierenden Kampf package.el
, meine Pakete mit + Quelpa zu verwalten, habe ich mich aufgeregt und meinen eigenen Paketmanager geschrieben . Es soll vollständig ersetzt package.el
werden, indem eine Paketverwaltungserfahrung bereitgestellt wird, die in fast jeder Hinsicht überlegen ist .
Sie können die sehr umfangreiche Dokumentation lesen , um mehr über alle Funktionen zu erfahren. Die relevanteste für diese Frage ist jedoch, dass straight.el
die perfekte Reproduzierbarkeit im Vordergrund steht . Dies bedeutet, dass es keine Rolle spielt, ob Sie Emacs normal oder auf einem neuen Computer starten. Alle lokalen Änderungen sind versionskontrolliert und können in einen kanonischen Zustand zurückgesetzt werden. In der Praxis wird dies erreicht, indem (1) Pakete als Git-Repositorys geklont werden und automatisierte Tools zum Verwalten ihres Zustands bereitgestellt werden; (2) Verwenden der Init-Datei als einzige Wahrheitsquelle für den Paketverwaltungsstatus, wobei keine veränderlichen Daten an anderer Stelle gespeichert werden; und (3) Verwenden optionaler Versionssperrdateien, um genaue Git-Revisionen jedes Pakets sowie aller Rezept-Repositorys und zu spezifizierenstraight.el
selbst.
Fügen Sie zunächst das Bootstrap-Snippet ein , das installiert und aktiviert wird straight.el
. Um sicherzustellen, dass ein Paket installiert ist, rufen straight-use-package
Sie einfach in Ihrer init-Datei auf:
(straight-use-package 'projectile)
Ja, so einfach ist das. Kein Umgang mit package-refresh-contents
oder irgendetwas davon. Wenn Sie dieses Formular aus Ihrer Init-Datei entfernen und Emacs neu starten, wird Projectile (anders als in ) nicht mehr geladenpackage.el
. Dies bedeutet, dass Sie sich keine Gedanken darüber machen müssen, ob Ihre Konfiguration auf einem neuen Computer nicht funktioniert, da Sie versehentlich von nicht deklarierten Paketen abhängig waren.
Sie können Pakete in Ihrer gesamten Init-Datei installieren, wann und wo immer Sie möchten (es ist nicht erforderlich, eine Liste von Paketen an einem einzelnen Punkt zu deklarieren). Natürlich kannst du das auch einfach machen
(dolist (package '(ace-jump-mode ... zzz-to-char)) (straight-use-package package))
wenn Sie die Liste bevorzugen. Ich empfehle jedoch, dass Sie verwenden use-package
, um Ihre Paketkonfiguration zu verwalten. Zuerst musst du es installieren:
(straight-use-package 'use-package)
Dann, da straight.el
die Integration mit eingebaut wurde use-package
, "funktioniert" folgendes:
(use-package projectile
:straight t
:init (projectile-mode 1))
Sobald Sie Ihre Init-Datei geschrieben haben, um die benötigten Pakete zu installieren, führen Sie sie aus M-x straight-freeze-versions
, um eine Versionssperrdatei zu speichern ~/.emacs.d/straight/versions/default.el
. Sie sollten diese Datei unter Versionskontrolle halten, da Sie straight.el
beim ersten Start von Emacs auf einem neuen Computer die korrekten Versionen aller Ihrer Pakete überprüfen können. (Sie können mit manuell zu den in der Sperrdatei angegebenen Versionen zurückkehren M-x straight-thaw-versions
.)
Um die Idee von maschinenlokalen Punktdateien zu unterstützen, die ich in meiner anderen Antwort erwähnt habe , straight.el
bietet sich ein Profilsystem an . Ich empfehle weiterhin die Verwendung von Symlinks für Ihre Punktedateien (in diesem Fall init.el
Ihre lokale Init-Datei, falls zutreffend, und die Versionssperrdatei, falls Sie eine verwenden möchten).
Wenn Sie sich fragen, wie sich der straight.el
Vergleich mit anderen Paketmanagern gestaltet, lesen Sie den Abschnitt mit den ausführlichen Vergleichen . Aber auch zu allem anderen gibt es viel mehr Dokumentation .
init.el
(zum Beispiel mit git), funktioniert dieser Ansatz auch (basierend aufuse-package
): lunaryorn.com/posts/…