golang独立二进制文件包管理工具插件stew的使用

Golang独立二进制文件包管理工具插件stew的使用

介绍

stew icon

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

可以配置以下内容:

  1. stewPath: 存储stew数据的位置
  2. stewBinPath: 安装二进制文件的位置
  3. 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

1 回复

更多关于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
}

注意事项

  1. Stew 主要设计用于 Linux/macOS,Windows 支持可能有限
  2. 某些包可能需要手动处理依赖关系
  3. 使用前建议先 stew update 更新包索引
  4. 对于生产环境,建议先测试包的兼容性

Stew 是一个轻量级的解决方案,特别适合需要管理多个独立二进制文件的开发环境。它比传统的包管理器更灵活,比手动下载更方便。

回到顶部