Управление пакетами следующего поколения с straight.el
После долгой и разочаровывающей борьбы за использование package.el+ Quelpa для управления моими пакетами я укусил пулю и написал свой собственный менеджер пакетов . Он предназначен для полной замены package.el, предоставляя опыт управления пакетами, который превосходит почти во всех отношениях.
Вы можете прочитать очень обширную документацию, чтобы узнать обо всех ее функциях, но самая важная для этого вопроса - это то, что straight.elфокусируется на идеальной воспроизводимости . Это означает, что не должно иметь значения, запускаете ли вы Emacs нормально или запускаете его на новом компьютере, и что любые локальные изменения зависят от версии и могут быть возвращены в каноническое состояние. На практике это достигается путем (1) клонирования пакетов в качестве репозиториев Git и предоставления автоматизированных инструментов для управления их состоянием; (2) использование init-файла в качестве единственного источника правды для состояния управления пакетами, при этом в другом месте не хранятся изменяемые данные; и (3) использование необязательных файлов блокировки версий для указания точных версий Git каждого пакета, а также любых репозиториев рецептов иstraight.el сам.
Для начала вставьте фрагмент начальной загрузки , который будет установлен и активирован straight.el. Затем, чтобы убедиться, что пакет установлен, просто поместите вызов straight-use-packageв ваш init-файл:
(straight-use-package 'projectile)
Да, это так просто. Не иметь дело с package-refresh-contentsили что-нибудь из этого мусора. Если вы удалите эту форму из вашего файла инициализации и перезапустите Emacs, Projectile больше не будет загружаться (в отличие от package.el). Это означает, что вам не нужно беспокоиться о том, что ваша конфигурация как-то не работает на новой машине, потому что вы случайно зависели от необъявленных пакетов.
Вы можете устанавливать пакеты где угодно и когда угодно, по всему файлу init (не нужно объявлять их список в одной точке). Конечно, вы также можете просто сделать
(dolist (package '(ace-jump-mode ... zzz-to-char)) (straight-use-package package))
если вы предпочитаете список. Однако я рекомендую вам использовать use-packageдля управления конфигурацией вашего пакета. Сначала вы должны установить его:
(straight-use-package 'use-package)
Затем, поскольку straight.elимеет встроенную интеграцию с use-package, следующее «просто работает»:
(use-package projectile
:straight t
:init (projectile-mode 1))
После того, как вы написали свой init-файл для установки необходимых пакетов, запустите, M-x straight-freeze-versionsчтобы сохранить файл блокировки версии ~/.emacs.d/straight/versions/default.el. Вы должны держать этот файл под контролем версий, так как он позволит straight.elпроверять правильные версии всех ваших пакетов при первом запуске Emacs на новой машине. (Вы можете вручную вернуться к версиям, указанным в файле блокировки, используя M-x straight-thaw-versions.)
Чтобы поддержать идею локальных точечных файлов, которые я упоминал в моем другом ответе , straight.elпредлагается система профилей . Я все еще рекомендую использовать символические ссылки для ваших файлов точек (в данном случае, init.elваш локальный файл инициализации, если это применимо, и файл блокировки версии, если вы хотите использовать один).
Если вам интересно, как straight.elсравниваются другие менеджеры пакетов, ознакомьтесь с обширным разделом сравнений . Но есть еще много документации по всем остальным тоже.
init.el(например, с помощью git), этот подход также работает (основан наuse-package): lunaryorn.com/posts/…