新包管理器 GitHub - progfolio/elpaca: An elisp package manager

话说又没人尝试一下这个 straight.el 竞品呢?

2 个赞

我试了一下发现从straight 迁移很困难。原因在于它这个包安装和加载的异步处理。

用 straight 我大部分配置是这么个格式:

(straight-use-package 'foo)

(once '(:packages foo)
  ;; setups for foo
)

(straight-use-package 'bar)

(once '(:packages bar)
  ;; setups for bar
)

但是这在 elpaca 下面实现不了,因为 elpaca-process-queues 还没有执行。所以目前要么是包安装和包配置分开写 (有点烦琐),要么是用它那个 elpaca-use-package (我本身不用 use-package) ,在这个问题有比较好的解决办法之前就不考虑了。

straight.el 有什么不好用的地方吗?

这个新的 elpaca 有啥优势?

Elpaca is an elisp package manager. It allows users to find, install, update, and remove third-party packages for Emacs. It is a replacement for the built-in Emacs package manager, package.el.

从简介看,elpaca是为了取代package.el,而不是use-package或者straight.el。

只是没把 straight 写上去而已,就是取代 straight 用的,这个作者也是 straight 目前的主要维护者。@aqua0210 相对 straight, elpaca 主要优势是:

  1. package 是异步安装的,比较直观的方面就是,不像straight 要先安装编译好一切才启动, 用 elpaca 是秒进 Emacs 再处理包队列。
  2. 代码量比较小,大概是 straight 的 40%
  3. 有个用来管理包的界面,功能比较齐全。

虽然我基本上用不到 3 那个界面。

5 个赞

取代 package.el 就是 straight.el 的竞品啦w

我看了下,似乎可以这样,把它例子里面 message 换成乃的配置

(elpaca foo (once ‘xxxx))

straight 一次只能安一个包,没有 ui,pin 某个包很麻烦。历史包袱太重了

我应该是试过,好像没那么简单。我依赖 once,但是 once 在包队列处理之前是不可用的。主要问题还是它必须用 elpaca 包一层,不像 straight 很单纯。 我可能会考虑把包安装和配置分开写,就是目前没看到这样做有什么好处。

分开很适合我。准备这周有空去试试看。现在还不知道它是如何管理load- path 的

啊,你看眼它的 elpaca-use-package 这个宏,在 1388 行。

`(elpaca ,order (use-package ,(elpaca–first order) ,@body))

它好像就是这样用的嘛…

如果能下载单个文件的话会想试试

是这样写的没错。我想表达的是,我迁移的话,需要把所有包的配置全部用 elpaca 包裹一遍,我觉得有点麻烦。

;; 这样可以
  (elpaca (once :host github :repo "emacs-magus/once"))
  (elpaca avy (once '(:packages avy) (message "hello")))

;; 这样不行
  (elpaca (once :host github :repo "emacs-magus/once"))
  (elpaca 'avy)
  (once '(:packages avy) (message "hello"))
1 个赞

。。。换了几次包管理器之后,我觉得不如整个自己的melpa服务器,不愿意进或不达标的包都扔进去自己维护,就用package.el算了

1 个赞

给once加个advice

那意味着所有暴露在 elpaca 之外的东西都需要去 hack 一下。比如 bind-key, general, meow 之类的,不太现实。我估计就只能妥协全部用 elpaca 包一遍。

1 个赞

其实配置和包分开很清晰, 包就用 submodule 管理, 自己定义的配置用 git 管理文件内容就好。

Emacs这些包管理器之所以怎么都别扭的原因是, 他们希望通过语法糖来统一包和自定义配置, 为了优雅的语法糖, 反而把简单的管理工作弄得巨复杂无比。

个人观点供参考。

8 个赞

确实是这样,我曾经用了 use-package 很长时间,最后还是去掉了。我发现我其实就是需要个延迟加载的功能,别的我都不需要。他反而限制了我写配置的方式。

straight 比较接近我理想的包管理形态,它只负责安装,不管配置,提供的命令也够我用了。要分离也可以做到,我只是觉得写在一起比较方便,debug 的时候可以一起comment 掉。如果不是因为我的 emacs 配置本身就是一个 submodule, 我可能也考虑直接用 submodule 管理包了,recursive 的 submodule 对我来说有点绕,哈哈

等你换新电脑后,可能发现延迟加载也不需要了 :rofl:

1 个赞

嵌套submodule一点都不绕,最外层管理配置,里面那一层就是各种包的head hash

1 个赞