mrcjkb.dev Home About Contact CV Archive

隆重推出 Lux - 一款豪华的 Lua 包管理器

发布于 2025年4月7日 是时候给 Lua 配备它应有的生态系统了!

一年多以来,我们一直在开发 Lux,这是一个用于创建、维护和发布 Lua 代码的全新包管理器。它通过一个简单直观的 CLI 来实现,该 CLI 的灵感来源于其他知名的包管理器,例如 cargo

今天,我们认为该项目已经达到了“非常适合日常使用”1 的状态。

特性

动机

Lua

虽然 Luarocks 功能广泛,但它也带有大约 20 年的包袱,这使得它难以适应现代 Lua 开发,同时保持向后兼容性。

使用 Lux,我们正在推动一个新的开始:

Neovim

感谢我们的 Neovim 插件管理器 rocks.nvim,以及后来 lazy.nvim 对 Luarocks 的支持,Luarocks 作为一种分发插件的方式,在 Neovim 领域稳步普及。但是,由于它不是完全可移植的,并且在系统与系统之间具有不可预测性,因此受到了严重阻碍。由于 Luarocks 是用 Lua 编写的,因此安装大量软件包并使用 rocks.nvim 同步插件的速度非常慢。

借助 Lux,我们希望插件将开始将自身视为 Lua 项目。使用 Lux 是非破坏性的,并且不会干扰当前分发 Neovim 插件的方式(通过 git)。

实际上,Lux 有一个 --nvim 标志,它告诉它将软件包安装到与 Neovim 的 :h packages 兼容的树结构中。

Nix

如果一个 Neovim 插件以 Luarocks 包的形式存在,那么 nixpkgs 将使用它作为事实来源。这主要是因为使用适当的包管理器,声明依赖项的责任是包作者的责任。但是,Luarocks 的 lockfile 支持非常基本,不包括源哈希值。虽然 Luarocks (与 Lux 一样) 通过其 luarocks.loader 支持冲突的依赖项,但 nixpkgs 无法合理地将同一依赖项的多个版本添加到其软件包集中。Lux 的 lux.lock 存储每个依赖项的源和 rockspec 哈希值。如果源 URL 是一个 git 仓库,lux 将存储一个 NAR hash。这意味着 lux.lock 可以用于创建一个带有所有依赖项的 fixed-output derivation,就像你可以使用 Cargo.lock 一样。

下一步

目前,我们的首要任务是消除错误并改进错误消息。很快,我们将重写 rocks.nvim,使其在底层使用 Lux 而不是 Luarocks。这应该使 rocks.nvim 在速度方面赶上其他插件管理器,并使其比以前更加稳定。如果重写成功,那么这对 Neovim 生态系统来说是个好消息,因为它意味着 Lux 也可以嵌入到其他地方(例如 lazy.nvim,过去在 luarocks 方面遇到过麻烦)!

文档

如果您想尽早加入 Lux 的行列,请访问 我们的文档网站。您可以在那里找到教程和指南。

如果您有任何问题或疑虑,请随时在 GitHub discussions我们的 issue tracker 中与我们联系。干杯!:)

Lux 团队

许可

  1. 我们仍然有一些需要完善的地方,例如 MSVC 支持、错误消息和边缘情况,但所有这些修复都计划在 1.0 版本中进行。↩︎
  2. Lua 5.1, 5.2, 5.3. 5.4 和 luajit。↩︎
  3. 有关详细信息,请参阅 我们的指南↩︎

Site proudly generated by Hakyll