背景
我们在看一些知名开源项目的时候,经常可以看到它们提供通过脚本一键安装命令,比如:
这种安装方式比较优雅,也十分极客。
本文探讨如何实现通过脚本一键安装 CLI 程序的方式。
这里补充一下为什么我会写这篇文章探讨脚本安装方式?
其实我之前维护的一个 CLI 程序提供了
homebrew
安装方式,用户可以通过执行 brew install xxx
一键安装 CLI 程序,同样十分优雅。但是不可避免的是,包管理工具仍然有它们自己的依赖,比如
homebrew
的依赖之一 sofawareupdate
如果版本过低的话,会导致安装失败。曾经有个用户就遇到了这个问题,他用
homebrew
安装失败后跑过来问你们还有其它安装方式吗?我只能指导他去 Github Release 页面直接下载安装包,这个过程中还需要询问用户是什么平台的操作系统,指导他将安装包解压到指定位置,然后配置 PATH,额外耗费了不少沟通成本。安装脚本就是另外一种可以将这个过程自动化、且依赖更少的安装 CLI 程序的方式。
分析和实现
使用脚本一键安装 CLI 程序的优势和限制:
优势:
- 一键安装,十分优雅+极客
- 相比 homebrew 或者使用其它包管理工具的方式,依赖更少,只有
curl/wget
限制:
- 只能提供给类 UNIX 系统使用,比如 Linux、MacOS,Windows 系统只能去下载 binary(为 windows 用户鸣不平)
实现:
- 准备好安装脚本,包含自动识别操作系统、shell 名称、准备下载链接、下载安装包、解压缩、自动覆写 PATH(比如 shell 是
zsh
就自动将 PATH 命令追加到.zshrc
中)等功能; 这种脚本在 Github 上面有很多借鉴,比如 wasmtime 或者 volta 的安装脚本。 这里我准备好了一个样例程序go-cli-prototype
,帮助你快速搭建自己的安装脚本,可以参考:go-cli-prototype/install.sh at master · elliotxx/go-cli-prototype (github.com)
- 准备好能够获取到安装脚本的链接地址,比如存放到代码仓库中通过 Github Raw 链接获取脚本内容,或者像一些知名项目一样将安装脚本挂载到官方域名下面;
这里推荐直接将安装脚本放到 Github 仓库中,简单粗暴。
以上面的样例程序
go-cli-prototype
为例,你可以通过下面链接地址一键安装 CLI 程序:curl -sSf
https://raw.githubusercontent.com/elliotxx/go-cli-prototype/master/scripts/install.sh
| bash
安装界面如下: