Homebrew 是一款 Mac OS 平台下的软件包管理工具;用当来安装工具非常方便,但是当我想把我开发的工具 上传(发布) 到 Homebrew ,以便能用 Homebrew 来安装时,发现:关于 Homebrew 包的 制作 和 发布 的文章 实在是太少了(第一次 发布 npm 包时,也是很多问题找不到答案);所以踩了很长时间的坑;本文就记录下这些,以使大家尽快走出误区;
Homebrew介绍
Homebrew 是 Mac 系统的软件包管理工具,具有安装、卸载、更新、查看、搜索等功能。安装包时,Homebrew 会自动管理 各种依赖 和 路径,十分方便快捷。
相关文章
关于Homebrew包的制作与发布的文章
注意事项
-
Tap 实际上就是一个 Git 仓库,也是软件仓库,但与别的包管理器不同的是,Tap 存放的不是已经编译好的二进制文件,而是 Formula,也就是用来下载、编译和安装脚本或软件的 Ruby 脚本。 当执行安装命令时,如
brew install sshcp
,Homebrew 就会在 Tap 在中寻找与包 sshcp 对应的 Formula,即 Ruby 脚本,然后按照该脚本定义的方法将 Keg (sshcp) 下载、编译、安装到 Cellar 中; -
Formula (配方) 是要被放在 Tap 的 Git 仓库里的;而在用命令
brew create [options] URL
创建 Formula 时,传的 URL 是来源于你要发布的 软件、脚本 的 Git 仓库,这个仓库 根 Tap 不是一个仓库,Tap 是一个需要符合 Homebrew 规范的、用来存放 Formula 文件的仓库,并不是存放你 的软件、脚本 的仓库;当然,你也可以将 软件、脚本 和 Tap 共用一个仓库;
- 用命令
brew create [options] URL
创建的 Formula 是被存放在/usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula/
文件夹中,该文件夹是用来存放 Homebrew 官方的 Formula 的,它是从 Homebrew 官方仓库homebrew/homebrew-core
克隆下来的;所以,当你创建好你自己的 Formula 后,需要将 你的 Formula 从官方的 Formula/usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula/
中移出来(即:从 从官方的 Formula 中删除),然后上传到 你的 Tap 仓库的Formula/
文件夹下;如果你不将你的 Formula 从官方的 Formula 中删除,则会导致 当你用 brew 命令brew install sshcp
安装你的包时,Homebrew 不会根据你的 Tap 仓库中定义的 Formula 来安装,而是会根据 你电脑本机中 Homebrew 官方的 Formula 文件夹中 你的包对应的 Formula 来安装;即: Homebrew 官方的 优先级 高于 第三方的,brew 会优先在 Homebrew 官方的文件夹中进行查找;
- 如果你想把某个文本安装到 bin 目录中,以便在命令行中能使用,你可能需要在 Formula 的 安装命令定义
def install
中用到下面这个安装命令:
示例:bin.install <被安装的文件的路径>...
这个安装命令的作用是将 指定的文件 移到 bin 目录,并给该文件增加可执行权限(bin.install "src/sshcp"
chmod 0555 sshcp
);
- 安装命令中定义符号链接:
创建符号链接时,要确保它们是相对符号链接,这样可以更轻松地创建可重定位的 Bottle (瓶子,Homebrew 中的另一个概念)。
例如,要在 bin 目录中 创建一个 链接到 libexec 中 可执行文件的符号链接,可以用下面这条命令:
来代替bin.install_symlink libexec/"name"
因为,通过 install_symlink 创建的符号链接可以确保是相对符号链接,而 ln_s 命令只会在 接收到 相对路径时才会产生相对的符号链接;ln_s libexec/"name", bin
网友评论