讨论一下straight.el

我昨天晚上从package.el迁移到了straight.el。说下感想。


首先速度方面,作者的说法是跟package.el差不多,主要影响因素还是网络速度。

功能方面,straight.el有优势,我现在只需要straight-use-package,不需要手动更新。不过目前不支持删除冗余包的功能(准确的说是repo)。虽然不支持删除repo,没有用到的包是不会被load的。

github的支持方面straight.el也完胜,首先melpa上没有的包只要用recipe就能下载。很方便,我没用过quelpa,不知道对比如何。straight.el支持一些quelpa没有的功能,比如merge,push,pull之类(当然你也可以用magit手动操作)。

最启动速度的影响方面我不清楚,因为我的配置里包管理是单独做的,启动的时候不会检查包。有用过的补充一下。


这哥们大学就能写出来这么强的包让我自愧不如啊。

P.S. 继hlisnner更新狂魔后,emacs社区又迎来raxod502文档狂魔。有一种70年代吸着女士香烟用Emacs办公的超级秘书即视感。

3 个赞

我用 el-get,支持的协议更多。比如想要克隆某个特定的 commit,但是 github 不支持这么做,不过却提供了 cimmit 对应的 zip 下载。

另外 straight.el 好像还不支持浅克隆。

前两天刚从 straight.el 换回 package.el,至于前者的缺点:

  • straight.elpackage.el 复杂

  • 更新包的命令(M-x straight-pull-all)异常难用

  • 重新安装所有的包(比如在一台新电脑上配置 Emacs 环境)可能会很慢,考虑到 git clone 的体积很大,其次是国内的网络环境比较差

    ~ $ du -sh ~/.emacs.d/straight/repos/
    1.8G	/Users/xcy/.emacs.d/straight/repos/
    

至于优点可以参考 README。

再加一条,不支持安装 info 文件

Info 是支持的,只是由于一些无法避免的原因可能会失败,比如用户电脑上没装 texinfo、texinfo 版本不匹配、安装 info 的命令比较复杂(straight.el 不支持自定义命令)。

package.el / ELPA 可以看成从「二进制包」安装,straight.el 可以看成从 「源代码包」安装。

1 个赞

我以为我会喜欢Gentoo

后来发现原来我喜欢Arch

Linux 太弱,像 Pentium 4 + 512MB 这种情况 Arch 完全没用,反而 BSD 都能支持。

我觉得应该定一些标准宏,利用 eval-when 实现在加载包的时候自动编译 el 文件和安装其它相关组件。而且 straight.el 这种用软链接的方式我觉得缺少灵活性。

现在的包管理策略都是默认给单用户安装的,对于我这样习惯做不同事切换不同用户账号的策略并不方便。

很早就吐槽 straight.el 不支持浅克隆(导致慢和占空间)了: 如何对正在使用的elisp包进行编写调试? - #16,来自 twlz0ne 它现在还没计划要改善吗?

浅克隆是指什么?我刚开始接触从源安装包没什么概念。

不全部复制下来的话不会缺少文件吗?

正常克隆会把文件修改记录也下载下来

2 个赞

你的发行版不对而已。slackware就能支持,debian更不用说吧。老旧机器有专用发行版的

我觉得任何供最终用户使用的git clone命令都应该加上--depth 1参数……

3 个赞

shallow clone的issue,说是放进了milestone,但是里面却没有它,我没搞清楚现在实现了没。反正至少是在路上了……


然后我想问,怎么把melpa之类的仓库换成emacs-china源?straight-recipe-repositories

straight 不支持 ELPA,只能从 Git 安装包,部分包的 Git 信息来自于 Melpa,如 Magit

1 个赞

想尝试一下,感觉git submodule 安装爽,删除起来特别让人头秃

我给magit写了个magit-submodule-remove

很好用

刚体验了一下straight,有以下感想:

  1. 我完全不需要自动build的功能。

  2. 文档虽然很多,但我觉得其实不如给实际配置的例子。比如我想禁用build,找到参数:no-build,但这个参数怎么用呢? 文档说了一大推,我看了半天还是一头雾水,直到在issue中搜到了这样的代码:

    (straight-override-recipe
       '(org :type git :host github :repo "emacsmirror/org" :no-build t))
    (use-package org)
    

    这不就清楚了吗。。。

  3. 因为straight默认只把package的build文件夹加入 load-path,所以如果build的过程出了问题,导致build文件夹是空,那么就会找不到这个package。

  4. 我用straight配置aweshell,就碰到了3中的bug,然后我至今都不知道它为什么没有build(是因为没有Makefile吗?但没必要为了使用straight特地为没有Makefile的package特地写一个吧。。。)

所以最终我禁用了straight的build功能,然后另写了代码把straight下载的package加入到load-path里。

总结:比我想象的要难用 :sweat:

5 个赞

我今天还在想要不要转到straight,看来还是再观望一会比较好吧……

1 个赞