Lux
一个用于 Lua 的豪华包管理器。
主要特性 • 如何使用 • 与 LuaRocks 的比较 • 相关项目 • 贡献指南
:star2: 主要特性
:package: 创建和管理 Lua 项目
- 通过
lux.toml文件轻松管理依赖项、构建步骤等。 - 完全支持现有的
.rockspec文件。
:gear: 现代、舒适的工具链
- 并行构建和安装。
- 通过简单的 CLI 命令添加/移除依赖项。
- 集成代码格式化、类型检查和强大的代码检查。
- 良好的开发体验 - 自动将项目依赖项添加到
.luarc.json以提供丰富的 LSP 诊断。 - 将项目(包括依赖项)分发为安装树归档 或静态二进制文件,无需安装 Lua。
:tada: 自动生成 Rockspec
- 告别在源代码中管理 10 个不同的 rockspec 文件!
:jigsaw: 轻松处理 Lua 版本
- Lux 会自动处理安装正确版本的 Lua 头文件。
- 不再需要担心用户抱怨系统中安装了错误的 Lua。
:lock: 高级锁文件支持
- 完全可复现的开发者环境。
- 让 Lux 易于与 Nix 集成!
:globe_with_meridians: 与生态系统完全兼容
- 支持现有的 LuaRocks 软件包。
- 拥有复杂的 rockspec 且不想将其重写为 TOML?没问题!
Lux 允许创建
extra.rockspec文件,一切都能正常工作。 - 拥有非常复杂的构建脚本?如果检测到需要保留最大兼容性,Lux 可以调用
luarocks。
:gear: 如何使用
请随时查阅 文档 了解如何开始使用 Lux!
它包含教程和若干指南,帮助你熟练掌握 Lua 项目管理。
[!NOTE]
Lux 虽然功能完整,但仍处于开发阶段, 尚未发布
1.0版本。
:bar_chart: 与 LuaRocks 的对比
由于该项目仍处于开发阶段,部分 LuaRocks 功能 尚未完全实现。 另一方面,Lux 拥有一些 LuaRocks 中不存在的功能。
下表提供了简要对比:
| Lux | LuaRocks v3.13.0 | |
|---|---|---|
| 项目格式 | TOML / Lua | Lua |
| 添加/移除依赖项 | :white_check_mark: | :x: |
| 并行构建/安装 | :white_check_mark: | :x: |
| 带有完整性检查的适当锁文件支持 | :white_check_mark: | :x: (基础,仅限依赖项版本) |
| 使用 busted 运行测试 | :white_check_mark: | :white_check_mark: |
| 使用 luacheck 进行代码检查 | :white_check_mark: | :x: |
| 使用 stylua、luafmt 或 emmylua_codestyle 进行代码格式化 | :white_check_mark: | :x: |
| 自动检测/安装 lua | :white_check_mark: | :x: |
| 默认构建规范 | :white_check_mark: | :white_check_mark: |
| 自定义构建后端 | :white_check_mark:1 | :white_check_mark: |
rust-mlua 构建规范 | :white_check_mark: (builtin) | :white_check_mark: (external build backend) |
treesitter-parser 构建规范 | :white_check_mark: (builtin) | :white_check_mark: (external build backend) |
| 安装预构建二进制 rocks | :white_check_mark: | :white_check_mark: |
| 使用单个命令安装多个包 | :white_check_mark: | :x: |
| 使用版本约束安装包 | :white_check_mark: | :x: |
使用 pkg-config 自动检测外部依赖和 Lua 头文件 | :white_check_mark: | :x: |
| 在运行时解析同一依赖的多个版本 | :white_check_mark: | :white_check_mark: |
| 打包并上传预构建二进制 rocks | :white_check_mark: | :white_check_mark: |
| Luarocks.org 清单命名空间 | :white_check_mark: | :white_check_mark: |
| Luarocks.org 开发包 | :white_check_mark: | :white_check_mark: |
| 版本控制 | SemVer2 | arbitrary |
| 使用 CVS/Mercurial/SVN/SSCM 源的 Rockspecs | :x: (YAGNI3) | :white_check_mark: |
| 从多个安装树加载已安装的包 | :x: (#1493) | :white_check_mark: |
| 静态类型检查 | :white_check_mark: | :x: |
生成包含依赖项的 .luarc 文件 | :white_check_mark: | :x: |
| 本地项目中的 Git 依赖 | :white_check_mark: | :x: |
| 本地项目中的本地依赖 | :white_check_mark: | :x: |
| 单个工作区中的多个项目 | :white_check_mark: | :x: |
| 用于离线使用的供应商源 | :white_check_mark: | :x: |
| 分发安装树归档 | :white_check_mark: | :x: |
| 分发静态二进制文件 | :white_check_mark: | :x: |
| 加载 RockSpecs 和 LuaRocks 清单,并启用完整沙箱 | :white_check_mark: | :x: |
:package: 软件包
Lux 包含以下软件包和库:
-
lux-cli: 用于与项目交互并从命令行安装 Lua 软件包的主要 CLI。 -
lux-lua: Lux Lua API,提供:- 用于在运行时解析
require依赖关系的lux.loader。 - 一个用于将 Lux 嵌入 Lua 应用程序的正在开发中的 API。
我们为 Lua 5.1、5.2、5.3、5.4、5.5 和 LuaJIT 提供了
lux-lua的构建版本。lux-cli使用lux-lua来处理诸如lx lua、lx run和lx path之类的命令。
- 用于在运行时解析
-
lux-lib: Lux 的 Rust 库。是lux-cli和lux-lua的依赖项。
[!NOTE]
Lux 可以使用 pkg-config 或通过
LUX_LIB_DIR环境变量检测 lux-lua 的安装。我们的 预构建二进制发布工件 捆绑了
lux-lua。
:wrench: 从源码构建
依赖项:
gnupg、libgpg-error和gpgme(仅限 *nix)
如果在不启用 vendored 功能的情况下构建:
libgit2openssl
如果使用 vendored 功能进行构建:
perl和perl-coremake
要在 Linux 和 macOS 上静态链接 gpgme,请设置环境变量
SYSTEM_DEPS_LINK=static。
我们通常建议启用 vendored 功能进行构建,
以静态链接 libgit2 和 openssl:
SYSTEM_DEPS_LINK="static" cargo build --locked --profile release --features vendored
或者,使用动态链接库进行构建:
cargo build --locked --profile release
在 Windows/MSVC 上,你必须禁用 gpgme 功能:
cargo build --locked --profile release --no-default-features --features vendored
你可以使用以下命令为指定的 Lua 版本构建 lux-lua:
cargo xtask51 dist-lua # lux-lua for Lua 5.1
cargo xtask52 dist-lua # for Lua 5.2
cargo xtask53 dist-lua # ...
cargo xtask54 dist-lua
cargo xtask55 dist-lua
cargo xtaskjit dist-lua
这将把 lux-lua 安装到 target/dist/share/lux-lua/<lua>/lux.so,
并将一个 pkg-config .pc 文件安装到 target/dist/lib/lux-lua*.pc。
要构建补全:
cargo xtask dist-completions
要构建 man 页面:
cargo xtask dist-man
要为您的平台构建二进制发行版,
其中包含补全、man 页面和 lux-lua:
cargo xtask dist-package
:snowflake: Nix flake
如果你想使用 Nix 来使用 Lux 的最新版本, 你可以导入我们的 flake。 它提供了以下内容的 overlay 和包:
lux-cli: Lux CLI 包。lux-lua51Lua 5.1 的 Lux Lua APIlux-lua52Lua 5.2 的 Lux Lua APIlux-lua53Lua 5.3 的 Lux Lua APIlux-lua54Lua 5.4 的 Lux Lua APIlux-lua55Lua 5.5 的 Lux Lua APIlux-luajitLuaJIT 的 Lux Lua API
如果你在 Nix devShell 中拥有 lux-lua 构建和 pkg-config,
Lux 将自动检测 lux-lua。
:bulb: 你可能还喜欢...
- LuaRocks - 原始的 Lua 包管理器
- rocks.nvim - 一个使用
luarocks作为底层支持的 Neovim 插件管理器,并且很快将重写以使用 Lux。
:purple_heart: 致谢
感谢 LuaRocks 团队长期维护 LuaRocks 和 luarocks.org。 没有他们之前的工作,Lux 将不可能实现。
:green_heart: 贡献
非常欢迎贡献! 请参阅 CONTRIBUTING.md 获取指南。
:book: 许可证
- Lux 采用 LGPL-3.0+ 许可证。
- Lux 标志 © 2025 由 Kai Jakobi 创作,采用 CC BY-NC-SA 4.0 许可证。