如何设置ELPA服务器?


15

我和一个伙伴希望开始编写专门用于我们公司的emacs软件包。(相信我,我们写的任何东西都不会受到外界的任何关注-它与内部工具的集成。)

我们希望使软件包的安装和维护尽可能简单,我们认为这意味着与集成package.el。我们需要做些什么来建立用于此类用途的存储库?


我会分叉MELPA并为您的包装写食谱!或者,仅提供食谱并将您的同事指向QUELPA。
lunaryorn

Answers:


18

package.el通过首先创建两个目录pkgs和来设置本地软件包归档文件(Emacs 24.5)local。(名称无关紧要。)组成软件包的文件进入pkgslocal最终将保存您的存档。如果要使其他人可以local使用存档,则可以使用Web服务器公开,但是过程与构建本地存档相同。

我在init.el文件中添加了以下内容:

(require 'package)
(setq package-enable-at-startup nil)

(require 'package-x)
(defvar local-archive
  (expand-file-name "local/" user-emacs-directory)
  "Location of the package archive.")
(setq package-archive-upload-base local-archive)
(add-to-list 'package-archives `("local" . ,local-archive) t)

(package-initialize)

我将档案保存在.emacs.d目录中(因此user-emacs-directoryexpand-file-name表格中),但是您可以将其放置在任意位置。

评估之后,执行M-x package-upload-file并输入要安装的软件包的文件名。这将在中生成一个新包local。你会看到有三个新文件,archive-contentsyourpackagename-version.el,和yourpackagename-readme.txt。现在,您应该可以M-x package-list-packages查看列出的软件包了。运气好的话,他们将位于标记为“新”的顶部。您可以像往常一样安装该软件包,您将看到它.emacs.d/elpa像其他任何软件包一样显示在目录中。

对于Emacs 24,这应该是开箱即用的。我不确定较早的版本。您的用户可以通过以下常规方式访问您的软件包:

(require 'package)
(setq package-enable-at-startup nil)
(add-to-list 'package-archives 
  '("archive" . "http://yourdomain.com/path-to-local-dir/"))
(package-initialize)

在他们的init.el档案中。

有关如何编写程序包的信息,请参见GNU Emacs Lisp手册中的准备Lisp代码以进行分发


谢谢!这是一个写得很好的答案,对我来说效果很好。我只有一个问题..当我这样做时M-x package-update-file,它将.el文件直接放在local/dir 下。有没有一种方法来创建一个子目录,每个包,这样我们就结了local/pkg1/pkg1.ellocal/pkg2/pkg2.el...?
Kaushal Modi

据我所知。该elpa目录设置你描述的方式。我真的不知道为什么local不是。请记住,这些文件是自动生成的,因此没有人真正需要查看它们。我使用git将文件保持在版本控制下,因此将local目录放入.gitignore其中。我保持pkgs目录的井井有条,并受版本控制,但这local是事实。
罗德尼·普莱斯

谢谢。因此要确认,所有文件也都以平面结构转储local/了吗?我希望采用分层结构,以便可以将包的URL元数据指定为;; URL: http://yourdomain.com/path-to-local-dir/pkg1,对于不同的包,依此类推。但这没什么大不了的。我很高兴在本地的elpa上发布我的软件包。:)
Kaushal Modi 2015年

1
我的也是。local无论如何,我不会将您的用户指向该目录。而是将它们指向原始源。
Rodney Price

这很棒!但是,当我将其与Windows上的tar文件一起使用时,会上传损坏的tar,因此我必须再次手动复制它。Emacs中的错误?24.5
fommil

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.