golang独立二进制文件包管理工具插件stew的使用
Golang独立二进制文件包管理工具插件stew的使用
介绍
stew是一个用于管理已编译二进制文件的独立包管理器。
主要特性:
- 从GitHub releases或直接URL安装二进制文件
- 轻松在团队和私有仓库间分发二进制文件
- 比其他包管理器更快获取最新release版本
- 快速浏览、安装和试验不同项目
- 可配置二进制文件安装位置
- 无需sudo权限
- 仅需单个二进制文件,无依赖
- 便携的Stewfile,支持版本锁定
- 从Stewfile.lock.json文件进行无交互批量安装
安装
stew支持macOS、Linux和Windows系统。
使用包管理器安装
macOS:
brew install marwanhawari/tap/stew
Arch Linux:
git clone https://aur.archlinux.org/stew.git
cd stew
makepkg -sric
下载预编译二进制文件
可以从release页面下载预编译的二进制文件。
使用Go安装
安装最新release版本:
go install github.com/marwanhawari/stew@latest
从源码安装:
git clone https://github.com/marwanhawari/stew
cd stew
go install .
使用示例
安装
# 从GitHub releases安装
stew install junegunn/fzf # 安装最新release版本
stew install junegunn/fzf@0.27.1 # 安装指定版本
# 从URL直接安装
stew install https://github.com/cli/cli/releases/download/v2.4.0/gh_2.4.0_macOS_amd64.tar.gz
# 从Stewfile安装
stew install Stewfile
# 从Stewfile.lock.json无交互安装
stew install Stewfile.lock.json
搜索
# 搜索GitHub仓库并使用终端UI浏览内容
stew search ripgrep
stew search fzf user:junegunn language:go # 使用GitHub搜索语法
浏览
# 浏览特定GitHub仓库的releases和assets
stew browse sharkdp/hyperfine
升级
# 升级二进制文件到最新版本(不适用于从URL安装的二进制文件)
stew upgrade rg # 使用二进制文件名直接升级
stew upgrade --all # 升级所有二进制文件
卸载
# 卸载二进制文件
stew uninstall rg # 使用二进制文件名直接卸载
stew uninstall --all # 卸载所有二进制文件
重命名
# 使用交互式UI重命名已安装的二进制文件
stew rename rg # 使用二进制文件名直接重命名
列出
# 列出已安装的二进制文件
stew list # 打印到控制台
stew list > Stewfile # 创建不包含版本锁定的Stewfile
stew list --tags > Stewfile # 创建包含版本锁定的Stewfile
配置
# 使用交互式UI配置stew文件路径
stew config # 自动更新stew.config.json
配置
stew
可以通过stew.config.json
文件进行配置。配置文件的位置取决于操作系统:
Linux/macOS | Windows |
---|---|
$XDG_CONFIG_HOME/stew 或 ~/.config/stew |
~/AppData/Local/stew/Config |
可以配置以下内容:
stewPath
: 存储stew数据的位置stewBinPath
: 安装二进制文件的位置excludeFromUpgradeAll
: 在stew upgrade --all
时不想升级的二进制文件列表
默认路径:
Linux/macOS | Windows | |
---|---|---|
stewPath |
$XDG_DATA_HOME/stew 或 ~/.local/share/stew |
~/AppData/Local/stew |
stewBinPath |
~/.local/bin |
~/AppData/Local/stew/bin |
配置方式:
- 首次运行
stew
时会查找stew.config.json
文件,如果没有会提示设置配置值 - 安装后可以使用
stew config
命令设置配置值 - 任何时候都可以手动创建或编辑
stew.config.json
文件
确保安装路径在PATH
环境变量中,否则无法使用stew
安装的二进制文件。
常见问题
为什么stew不能自动找到X仓库的二进制文件?
该仓库可能使用了非传统的二进制文件命名方案。您始终可以手动选择release资源。
stew能用于私有GitHub仓库吗?
是的,stew会自动检测是否有GITHUB_TOKEN
环境变量,并允许您访问私有仓库的二进制文件。
从大型Stewfile.lock.json安装时遇到GitHub API速率限制怎么办?
未经身份验证的GitHub API请求每小时限制为60次。但经过身份验证的请求每小时可达5,000次。为避免限制,设置GITHUB_TOKEN
环境变量。Stew
会自动检测并使用它进行经过身份验证的GitHub API请求。
更多关于golang独立二进制文件包管理工具插件stew的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html
更多关于golang独立二进制文件包管理工具插件stew的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
Golang 独立二进制文件包管理工具 - Stew 使用指南
Stew 是一个用于管理独立二进制文件的 Go 语言工具,类似于 Homebrew 或 Scoop,但专注于管理独立的二进制应用程序。它可以帮助你轻松安装、更新和管理各种 CLI 工具。
安装 Stew
首先安装 Stew 本身:
# 使用官方安装脚本
curl -fsSL https://raw.githubusercontent.com/marwanhawari/stew/master/install.sh | sh
# 或者通过 Go 安装
go install github.com/marwanhawari/stw@latest
安装完成后,Stew 的二进制文件会默认安装在 ~/.stew/bin
目录下,你需要将这个目录添加到 PATH 环境变量中:
# 对于 bash/zsh
echo 'export PATH="$HOME/.stew/bin:$PATH"' >> ~/.bashrc # 或 ~/.zshrc
source ~/.bashrc
# 对于 fish
echo 'set -gx PATH $HOME/.stew/bin $PATH' >> ~/.config/fish/config.fish
source ~/.config/fish/config.fish
基本使用
1. 搜索包
stew search ripgrep
2. 安装包
stew install ripgrep
3. 列出已安装的包
stew list
4. 更新包
stew upgrade ripgrep
5. 更新所有包
stew upgrade-all
6. 卸载包
stew uninstall ripgrep
高级功能
从特定来源安装
Stew 支持从 GitHub 发布、直接 URL 或自定义来源安装:
# 从 GitHub 发布安装
stew install gh:cli/cli
# 从直接 URL 安装
stew install https://example.com/tool.tar.gz
创建自定义包定义
你可以在 ~/.stew/packages
目录下创建自定义包定义。例如创建一个 my-tool.json
:
{
"name": "my-tool",
"version": "1.0.0",
"description": "My custom tool",
"homepage": "https://example.com",
"binaries": [
{
"url": "https://example.com/releases/my-tool-{{.OS}}-{{.Arch}}.tar.gz",
"files": [
{
"path": "my-tool",
"name": "my-tool"
}
]
}
]
}
然后就可以像普通包一样安装:
stew install my-tool
使用 Go 代码与 Stew 交互
以下是一个简单的 Go 程序,演示如何通过代码与 Stew 交互:
package main
import (
"fmt"
"os/exec"
)
func main() {
// 搜索包
searchResult, err := exec.Command("stew", "search", "ripgrep").Output()
if err != nil {
fmt.Printf("搜索失败: %v\n", err)
return
}
fmt.Printf("搜索结果:\n%s\n", searchResult)
// 安装包
fmt.Println("正在安装 ripgrep...")
installCmd := exec.Command("stew", "install", "ripgrep")
installCmd.Stdout = os.Stdout
installCmd.Stderr = os.Stderr
if err := installCmd.Run(); err != nil {
fmt.Printf("安装失败: %v\n", err)
return
}
fmt.Println("安装成功!")
}
配置 Stew
Stew 的配置文件位于 ~/.stew/config.json
,可以配置以下选项:
{
"bin_path": "~/.stew/bin",
"pkg_path": "~/.stew/packages",
"log_path": "~/.stew/logs",
"update_frequency": 24
}
注意事项
- Stew 主要设计用于 Linux/macOS,Windows 支持可能有限
- 某些包可能需要手动处理依赖关系
- 使用前建议先
stew update
更新包索引 - 对于生产环境,建议先测试包的兼容性
Stew 是一个轻量级的解决方案,特别适合需要管理多个独立二进制文件的开发环境。它比传统的包管理器更灵活,比手动下载更方便。