#darling #package-manager #declarative #extendable

已删除 darling_bin

声明式和可扩展的包管理器

0.1.0 2024年4月8日

#15 in #darling

MIT 许可证

16KB
230

darling

Declarative And Reproducible LINux Generalized

Linux的一个可扩展和声明式的包管理系统。

Darling允许管理几乎所有形式的现有包管理器,例如

  • 操作系统包管理器,如 pacmanaptdnf 等。
  • NodeJS全局包
  • Visual Studio Code 扩展

... 更多。

安装

手动

每次你向 darling 中添加新的模块时,都必须从源代码重新构建代码。这意味着你必须在你的机器上保留源代码。默认位置是 ~/.local/share/daring/source。你可以在这里找到它,如下所示

git clone https://github.com/darling-package-manager/darling.git
mkdir -p ~/.local/share/darling
mv darling ~/.local/share/darling/source

.bashrc (或编辑你的 .bashrc) 中添加

export $PATH="$PATH:~/.local/share/darling/source/target/release

确保至少构建项目一次,通过进入 source 目录并运行 cargo 来构建项目。之后,每当添加新的模块时,darling 将会重建自己。

实现Darling

Darling被设计为特别可扩展的,以便在 不改变Darling本身的情况下。这意味着新的包相关工具可以为Darling添加自己的支持。Darling使用一个非常特定的协议来创建模块。过程如下

  • 创建一个Rust (库) 项目。 它必须以 darling 开头。例如,cargo new darling-example
  • 使用 cargo add darling-apidarling-api 添加到依赖项中。
  • 创建一个空的struct,该struct实现了 darling::PackageManager
    • 确保函数 get_name() 在所有调用中返回一致的值,并且 不要返回 "module"module 是 darling 用来管理自身的内置保留名称。它应该对其他 darling 模块是唯一的,否则它们将不兼容。通常将其作为你的 crate 名称,不包括 darling- 前缀。例如,`darling
  • 使用名称 PACKAGE_MANAGER 声明你的结构体的 pub static 变量,使其可以从 crate 根目录访问。
  • 使用 cargo publishcrates.io 上发布你的 crate。

依赖关系

~5–16MB
~163K SLoC