ITADN
lumen-oss/lux · 文件 下载 ZIP
文件最后提交记录最后更新时间
README.md
以下内容由 AI 翻译,如有问题请点此提交 issue 反馈


Lux

Lux

一个用于 Lua 的豪华包管理器。

GitHub Actions Workflow Status GitHub Top Language GitHub License

主要特性如何使用与 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 中不存在的功能。

下表提供了简要对比:

LuxLuaRocks v3.13.0
项目格式TOML / LuaLua
添加/移除依赖项: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:
版本控制SemVer2arbitrary
使用 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 packaging status

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 lualx runlx path 之类的命令。
  • lux-lib: Lux 的 Rust 库。是 lux-clilux-lua 的依赖项。

[!NOTE]

Lux 可以使用 pkg-config 或通过 LUX_LIB_DIR 环境变量检测 lux-lua 的安装。

我们的 预构建二进制发布工件 捆绑了 lux-lua

:wrench: 从源码构建

依赖项:

  • gnupglibgpg-errorgpgme(仅限 *nix)

如果在不启用 vendored 功能的情况下构建:

  • libgit2
  • openssl

如果使用 vendored 功能进行构建:

  • perlperl-core
  • make

要在 Linux 和 macOS 上静态链接 gpgme,请设置环境变量 SYSTEM_DEPS_LINK=static

我们通常建议启用 vendored 功能进行构建, 以静态链接 libgit2openssl

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-lua51 Lua 5.1 的 Lux Lua API
  • lux-lua52 Lua 5.2 的 Lux Lua API
  • lux-lua53 Lua 5.3 的 Lux Lua API
  • lux-lua54 Lua 5.4 的 Lux Lua API
  • lux-lua55 Lua 5.5 的 Lux Lua API
  • lux-luajit LuaJIT 的 Lux Lua API

如果你在 Nix devShell 中拥有 lux-lua 构建和 pkg-config, Lux 将自动检测 lux-lua

:bulb: 你可能还喜欢...

  • LuaRocks - 原始的 Lua 包管理器
  • rocks.nvim - 一个使用 luarocks 作为底层支持的 Neovim 插件管理器,并且很快将重写以使用 Lux。

:purple_heart: 致谢

感谢 LuaRocks 团队长期维护 LuaRocksluarocks.org。 没有他们之前的工作,Lux 将不可能实现。

:green_heart: 贡献

非常欢迎贡献! 请参阅 CONTRIBUTING.md 获取指南。

:book: 许可证

Footnotes

  1. 通过一个使用 LuaRocks 作为后端的兼容层提供支持。

  2. 与 LuaRocks 版本解析器基本兼容, 该解析器允许任意数量的版本组件。 为了符合 SemVer,我们将第三个版本组件之后的任何内容 (specrev 除外)视为预发布/构建版本。

  3. You Aren't Gonna Need It.