☰
Cherri 包管理器完整教程:基于 Git 仓库的代码共享、安装与自动更新
2026/10/12 3:06:54 网站建设 项目流程

【免费下载链接】cherri

Siri Shortcuts Programming Language 🍒

项目地址:https://gitcode.com/gh_mirrors/ch/cherri
点击查看免费下载

🍒Cherri是一款专为 Siri Shortcuts(快捷指令)打造的编程语言,可将.cherri源码直接编译为可运行的 Shortcut。它内置了一套基于Git 仓库的包管理器:一条--install命令即可从远程 Git 仓库拉取代码包,编译时还会自动安装和更新所有依赖,让你像使用go get、npm install一样轻松管理 Shortcuts 项目。本教程带你快速上手Cherri 包管理器的安装、共享与自动更新全流程。


一、Cherri 包管理器是什么?

在 Cherri 中,"包"就是一个包含 Cherri 源码的远程 Git 仓库。与传统包管理不同,它的核心特点是:

特性说明
📦 Git 仓库即包每个包对应一个cherri-{package_name}仓库,无需中心化仓库索引
🔄 编译时自动更新每次编译.cherri文件时,自动检查并安装/更新依赖
🧩 自动 #include包中的代码会被自动注入到你的项目里,无需手动引用
🔐 信任机制首次安装前会询问你是否信任该仓库,防止恶意代码自动注入
🏠 支持私有仓库可通过--add-uri指定任意 Git 托管地址

包管理逻辑的完整实现位于 packages.go,命令参数注册在 args.go。


二、准备工作:安装 Cherri 编译器

Cherri 是一个 Go 编写的静态编译二进制,推荐通过包管理器安装:

Homebrew 方式(macOS):

brew tap electrikmilk/cherri brew install electrikmilk/cherri/cherri

Nix 方式:

nix profile install github:electrikmilk/cherri

安装完成后,直接运行cherri(不带参数)即可看到樱桃 Logo 和完整的命令帮助。也可以将 ReadMe.md 作为快速参考。


三、创建你的第一个 Cherri 包:--init初始化步骤

包名遵循两种格式,cherri --init会做正则校验(见 newPackage):

  • 私有包签名:@{author}/{package_name}
  • 远程 Git 仓库:https://{domain}/{username}/cherri-{package_name}
# 在当前目录初始化一个包 cherri --init @alice/myutils

执行后会在当前目录生成info.plist—— 它是包的清单文件(manifest),记录包名、作者、托管地址以及依赖列表(结构定义见 cherriPackage)。之后把代码提交到以cherri-myutils命名的 Git 仓库,别人就能安装你的包了。

💡一个合格的包仓库必须满足:根目录存在入口文件main.cherri和info.plist,否则安装会失败(校验逻辑见 install)。


四、安装一个包:一条--install命令

在你的项目目录(已有info.plist)中执行:

# 安装公开仓库包(默认托管在 github.com) cherri --install @bob/datekit # 也可以直接写完整仓库地址 cherri --install https://gitee.com/bob/cherri-datekit

安装时发生的事情:

  1. Cherri 会先询问"Do you trust this package?",输入y后该包签名会写入信任列表~/.cherri/trusted.plist(见 checkTrustedPackages);
  2. 通过git clone --depth 5浅克隆仓库到本地./packages/@bob/datekit/目录;
  3. 校验main.cherri与info.plist存在;
  4. 把依赖写入项目的info.plist,并递归安装该包自身声明的依赖(见 loadDependencies)。

输出示例:

Installing @bob/datekit from https://github.com/bob/cherri-datekit.git... [+] @bob/datekit installed: ./packages/@bob/datekit

五、自动更新的魔法:编译时零操作拉取依赖

这是 Cherri 包管理器最贴心的设计——你甚至不需要手动执行安装。

编译入口 preParse 的流程是:

  1. 检测到当前目录存在info.plist时,自动调用installPackages()检查每个依赖是否已克隆;
  2. 对已存在的包跳过,对缺失的包自动重新克隆;
  3. 调用 includePackages 在源码顶部按签名排序自动插入#include './packages/@user/name/main.cherri'语句,实现代码注入;
  4. 再走正常的 include 解析(includes.go)完成编译。

也就是说,只要info.plist里登记了依赖,每次运行cherri main.cherri都会自动同步代码。依赖方升级后,你本地会自动拿到新实现——这就是"基于 Git 仓库的自动更新"。


六、常用包管理命令清单

命令作用
cherri --init @{author}/{name}初始化包,生成info.plist
cherri --install @user/pkg安装远程 Git 包
cherri --remove @user/pkg删除包文件并从清单移除
cherri --package查看当前包信息(含依赖列表)
cherri --packages列出所有已安装包
cherri --tidy重新安装(强制刷新)全部依赖
cherri --add-uri gitee.com设置当前包的托管地址

🔁提示:当仓库端发生破坏性更新或本地文件损坏时,执行cherri --tidy即可删除旧文件并全量重新克隆(实现见 tidyPackage)。


七、管理私有仓库:--add-uri一步配置

默认情况下,包会托管在github.com(URL 规则见 url)。如果你的仓库在 Gitee、自建 GitLab 或任何兼容 Git 的服务上:

# 发布方:将当前包关联到私有托管地址 cherri --add-uri gitee.com # 使用方:安装时可直接写完整 URL,无需额外配置 cherri --install https://gitee.com/alice/cherri-internal-tools

--add-uri会把地址写入info.plist的Uri字段;清单中Uri为空时显示为Hosted: Private(见 printPackage)。


八、目录结构速览:包都装在哪里?

一个使用包管理器的 Cherri 项目,编译后的目录大致长这样:

my-project/ ├── info.plist # 包清单:作者、Uri、依赖列表 ├── main.cherri # 入口文件 └── packages/ ├── @alice/myutils/ # 克隆下来的包(含 main.cherri、info.plist) └── @bob/datekit/
  • 包的安装路径固定为./packages/@用户/包名(见 path);
  • Cherri 的全局数据(如信任列表)存放在~/.cherri/目录。

九、常见问题 FAQ

Q1:安装提示unable to install怎么办?仓库必须提供main.cherri和info.plist两个文件,且 Git 地址必须正确。可先用git clone手动验证仓库可达。

Q2:提示info.plist does not exist?说明当前目录还没初始化,先运行cherri --init @你的名字/包名(错误来源见 initPackageError)。

Q3:如何调试编译与包的注入过程?加上--debug(或-d)参数,会打印预处理文件、调试信息与.plist输出,包括 include 展开映射(printIncludesDebug)。

Q4:包被标记为 Archived 会怎样?编译器会打印黄色警告[!] Archived package,但仍会继续安装,提醒你关注包的维护状态。


十、写在最后

Cherri 包管理器用"Git 仓库 = 包"的极简设计,让 Shortcuts 项目第一次拥有了工程化的代码共享与依赖管理能力:--init建包、--install装包、--tidy刷新,编译时自动同步更新。配合 #include 多文件组织、函数定义与类型检查,构建大型 Shortcuts 项目再也不怕维护困难了。

📌相关源码:packages.go(包管理核心)、args.go(命令参数)、parser.go(编译时自动安装)。现在就开始发布你的第一个 Cherri 包吧!

【免费下载链接】cherri

Siri Shortcuts Programming Language 🍒

项目地址:https://gitcode.com/gh_mirrors/ch/cherri
点击查看免费下载

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询