Skip to content

🌍 全局操作

Composer SDK 的全局操作模块封装 composer global 子命令的全部能力——在 Composer 全局目录(~/.composer)中安装、更新、移除、列举、执行依赖,以及生成全局自动加载、初始化全局项目、查看状态。所有方法都挂在核心类型 Composer 上。

主方法定义在 pkg/composer/global.goWithOptions 变体与批量变体(GlobalInitGlobalRequireMultipleGlobalRemoveMultiple)定义在 pkg/composer/global.gopkg/composer/additional_methods.go

包路径:github.com/scagogogo/composer-skills/pkg/composer

能力一览 🌍

方法作用返回值
GlobalRequire全局安装单个包error
GlobalRequireWithOptions带选项全局安装单个包error
GlobalRequireMultiple一次性全局安装多个包error
GlobalUpdate全局更新包error
GlobalUpdateWithOptions带选项全局更新包error
GlobalRemove全局移除单个包error
GlobalRemoveWithOptions带选项全局移除单个包error
GlobalRemoveMultiple一次性全局移除多个包error
GlobalInstall全局安装依赖error
GlobalList列出全局安装的包(string, error)
GlobalHome获取全局目录路径(string, error)
GlobalExecute执行全局安装的二进制(string, error)
GlobalStatus显示全局安装包状态(string, error)
GlobalDumpAutoload为全局安装生成自动加载error
GlobalInit在全局目录初始化项目error

全局目录

所有 global 子命令都在 ~/.composer(由 COMPOSER_HOME 决定)下工作。可用 配置模块GetComposerHome 获取实际路径。


🌍 GlobalRequire

全局安装包,等价于 composer global require package[:version]

何时使用

需要安装全局可用的 CLI 工具(如 phpunit/phpunitfriendsofphp/php-cs-fixerlaravel/installer)时使用。

签名

go
func (c *Composer) GlobalRequire(packageName string, version string) error

参数

参数类型说明
packageNamestring包名,例如 symfony/console
versionstring版本约束,例如 ^5.0;空字符串表示最新版本

返回值

  • error:全局安装过程中发生的错误。

示例

go
package main

import (
	"log"

	"github.com/scagogogo/composer-skills/pkg/composer"
)

func main() {
	comp, err := composer.New(composer.DefaultOptions())
	if err != nil {
		log.Fatalf("初始化 Composer 失败: %v", err)
	}

	// 全局安装最新版的 Laravel 安装器
	if err := comp.GlobalRequire("laravel/installer", ""); err != nil {
		log.Fatalf("全局安装失败: %v", err)
	}

	// 全局安装指定版本
	if err := comp.GlobalRequire("symfony/console", "^6.0"); err != nil {
		log.Fatalf("全局安装失败: %v", err)
	}
}

进阶

需要 --prefer-dist--no-progress--no-suggest 等额外参数时使用 GlobalRequireWithOptions;一次安装多个包时使用 GlobalRequireMultiple


🌍 GlobalRequireWithOptions

带自定义选项全局安装包,等价于 composer global require [options] package[:version]

何时使用

需要控制安装方式(优先 dist/source、禁用进度条、跳过建议等)时使用。

签名

go
func (c *Composer) GlobalRequireWithOptions(packageName string, version string, options map[string]string) error

参数

参数类型说明
packageNamestring要全局安装的包名
versionstring版本约束,空字符串表示最新版本
optionsmap[string]string额外选项,键为选项名,值为选项值

选项构造规则

options 经内部 buildOptionsArgs 处理:键按字典序排序后,值为空则生成 --key,否则生成 --key=value,保证命令构造确定性。

返回值

  • error:全局安装过程中发生的错误。

示例

go
options := map[string]string{
	"prefer-dist": "",
	"no-progress": "",
	"no-suggest":  "",
}
if err := comp.GlobalRequireWithOptions("symfony/console", "^5.0", options); err != nil {
	log.Fatalf("全局安装包失败: %v", err)
}

🌍 GlobalRequireMultiple

一次性全局安装多个包,等价于 composer global require pkg1[:v1] pkg2[:v2] ...

何时使用

需要批量安装一组全局工具时使用——比循环调用 GlobalRequire 更高效(只触发一次解析与写入)。

签名

go
func (c *Composer) GlobalRequireMultiple(packages map[string]string) error

参数

参数类型说明
packagesmap[string]string包名到版本约束的映射;值为空字符串表示最新版本

返回值

  • error:全局安装过程中发生的错误。

示例

go
packages := map[string]string{
	"laravel/installer":         "",      // 最新版本
	"friendsofphp/php-cs-fixer": "^3.0",
	"phpunit/phpunit":           "^10.0",
}
if err := comp.GlobalRequireMultiple(packages); err != nil {
	log.Fatalf("批量全局安装失败: %v", err)
}

遍历顺序

map 遍历顺序在 Go 中不确定,因此最终命令行参数顺序也不确定。Composer 对参数顺序不敏感,结果一致;若需确定性输出(如审计日志),请改用 GlobalRequireWithOptions 逐个安装。


🌍 GlobalUpdate

全局更新包,等价于 composer global update [packages...]

何时使用

需要更新全局工具到符合约束的新版本时使用。传入空切片则更新全部全局包。

签名

go
func (c *Composer) GlobalUpdate(packages []string) error

参数

参数类型说明
packages[]string要更新的包名列表,为空则更新所有包

返回值

  • error:全局更新过程中发生的错误。

示例

go
// 更新指定的全局包
if err := comp.GlobalUpdate([]string{"symfony/console"}); err != nil {
	log.Fatalf("全局更新失败: %v", err)
}

// 更新所有全局包
if err := comp.GlobalUpdate(nil); err != nil {
	log.Fatalf("全局更新失败: %v", err)
}

进阶

需要 --prefer-dist--no-dev--no-progress 等选项时使用 GlobalUpdateWithOptions


🌍 GlobalUpdateWithOptions

带自定义选项全局更新包,等价于 composer global update [options] [packages...]

何时使用

需要在 CI 中静默更新、或控制是否包含开发依赖时使用。

签名

go
func (c *Composer) GlobalUpdateWithOptions(packages []string, options map[string]string) error

参数

参数类型说明
packages[]string要更新的包名列表,为空则更新所有包
optionsmap[string]string额外选项

返回值

  • error:全局更新过程中发生的错误。

示例

go
options := map[string]string{
	"prefer-dist": "",
	"no-dev":      "",
	"no-progress": "",
}
if err := comp.GlobalUpdateWithOptions([]string{"symfony/console"}, options); err != nil {
	log.Fatalf("全局更新包失败: %v", err)
}

🌍 GlobalRemove

全局移除包,等价于 composer global remove package

何时使用

不再需要某个全局工具、或要清理冲突的全局包时使用。

签名

go
func (c *Composer) GlobalRemove(packageName string) error

参数

参数类型说明
packageNamestring要全局移除的包名

返回值

  • error:全局移除过程中发生的错误。

示例

go
if err := comp.GlobalRemove("symfony/console"); err != nil {
	log.Fatalf("全局移除失败: %v", err)
}

进阶

需要 --no-progress--no-update 等选项时使用 GlobalRemoveWithOptions;一次移除多个包时使用 GlobalRemoveMultiple


🌍 GlobalRemoveWithOptions

带自定义选项全局移除包,等价于 composer global remove [options] package

何时使用

需要禁用进度条、或移除时不立即触发依赖更新时使用。

签名

go
func (c *Composer) GlobalRemoveWithOptions(packageName string, options map[string]string) error

参数

参数类型说明
packageNamestring要全局移除的包名
optionsmap[string]string额外选项

返回值

  • error:全局移除过程中发生的错误。

示例

go
options := map[string]string{
	"no-progress": "",
	"no-update":   "",
}
if err := comp.GlobalRemoveWithOptions("symfony/console", options); err != nil {
	log.Fatalf("全局移除包失败: %v", err)
}

🌍 GlobalRemoveMultiple

一次性全局移除多个包,等价于 composer global remove pkg1 pkg2 ...

何时使用

需要批量清理一组不再使用的全局工具时使用——比循环调用 GlobalRemove 更高效。

签名

go
func (c *Composer) GlobalRemoveMultiple(packages []string) error

参数

参数类型说明
packages[]string要全局移除的包名列表

返回值

  • error:全局移除过程中发生的错误。

示例

go
packages := []string{
	"laravel/installer",
	"friendsofphp/php-cs-fixer",
	"phpunit/phpunit",
}
if err := comp.GlobalRemoveMultiple(packages); err != nil {
	log.Fatalf("批量全局移除失败: %v", err)
}

🌍 GlobalInstall

全局安装依赖,等价于 composer global install

何时使用

全局 composer.json 已存在、需要按 composer.lock 安装依赖时使用——常用于在新机器上恢复全局工具集。

签名

go
func (c *Composer) GlobalInstall() error

返回值

  • error:全局安装过程中发生的错误。

示例

go
if err := comp.GlobalInstall(); err != nil {
	log.Fatalf("全局安装失败: %v", err)
}

Install vs Require

GlobalInstallcomposer.lock 安装(不修改依赖清单);GlobalRequire 会向 composer.json 追加依赖并解析版本。


🌍 GlobalList

列出全局安装的包,等价于 composer global show

何时使用

需要查看当前全局装了哪些工具及版本时使用。

签名

go
func (c *Composer) GlobalList() (string, error)

返回值

  • string:全局安装包列表的原始输出。
  • error:列出失败时返回的错误。

示例

go
output, err := comp.GlobalList()
if err != nil {
	log.Fatalf("列出全局包失败: %v", err)
}
fmt.Println("全局已安装的包:")
fmt.Println(output)

命令映射

此方法实际执行 composer global show(Composer 用 show 列出包,没有独立的 global list 子命令)。


🌍 GlobalHome

获取全局目录路径,等价于 composer global home

何时使用

需要定位全局 vendor/bin、全局 composer.json 或全局 auth.json 时使用。

签名

go
func (c *Composer) GlobalHome() (string, error)

返回值

  • string:全局目录路径。
  • error:获取失败时返回的错误。

示例

go
home, err := comp.GlobalHome()
if err != nil {
	log.Fatalf("获取全局目录失败: %v", err)
}
fmt.Printf("Composer 全局目录: %s\n", home)

更可靠的替代

配置模块GetComposerHome 通过 composer config --global home 获取,语义更清晰,推荐优先使用。


🌍 GlobalExecute

执行全局安装的包中的二进制文件,等价于 composer global exec command [args...]

何时使用

需要在程序里调用某个全局安装的 CLI 工具(如 php-cs-fixerlaravel)时使用。

签名

go
func (c *Composer) GlobalExecute(command string, args ...string) (string, error)

参数

参数类型说明
commandstring要执行的二进制名称
args...string透传给二进制的参数

返回值

  • string:命令执行的输出结果。
  • error:执行过程中发生的错误。

示例

go
// 调用全局安装的 php-cs-fixer
output, err := comp.GlobalExecute("php-cs-fixer", "fix", "src/", "--dry-run")
if err != nil {
	log.Fatalf("执行失败: %v", err)
}
fmt.Println(output)

与 Exec 模块的区别

脚本执行模块Exec 执行的是项目 vendor/bin 下的二进制;GlobalExecute 执行的是全局 vendor/bin 下的二进制。


🌍 GlobalStatus

显示全局安装的包的状态,等价于 composer global status

何时使用

需要查看全局包是否有未提交的本地修改、是否落后于远程时使用。

签名

go
func (c *Composer) GlobalStatus() (string, error)

返回值

  • string:状态信息的原始输出。
  • error:获取失败时返回的错误。

示例

go
status, err := comp.GlobalStatus()
if err != nil {
	log.Fatalf("获取全局状态失败: %v", err)
}
fmt.Println("全局包状态:")
fmt.Println(status)

🌍 GlobalDumpAutoload

为全局安装生成自动加载文件,等价于 composer global dump-autoload [--optimize]

何时使用

手动改动了全局包的源码、或想优化全局工具启动性能时使用。

签名

go
func (c *Composer) GlobalDumpAutoload(optimize bool) error

参数

参数类型说明
optimizebooltrue 启用 --optimize 优化自动加载(生产推荐)

返回值

  • error:生成自动加载过程中发生的错误。

示例

go
// 生成优化的自动加载
if err := comp.GlobalDumpAutoload(true); err != nil {
	log.Fatalf("生成全局自动加载失败: %v", err)
}

🌍 GlobalInit

在全局目录初始化一个项目,等价于 composer global init --name=<name> --no-interaction

何时使用

需要从零创建全局 composer.json(例如初始化一套全局工具清单)时使用。

签名

go
func (c *Composer) GlobalInit(name string) error

参数

参数类型说明
namestring项目名称,格式 vendor/name

返回值

  • error:初始化过程中发生的错误。

示例

go
if err := comp.GlobalInit("myvendor/global-tools"); err != nil {
	log.Fatalf("全局初始化失败: %v", err)
}

非交互式

此方法固定附带 --no-interaction,适合在 CI、容器等无 TTY 环境中使用。若全局 composer.json 已存在,init 可能会拒绝覆盖。


进阶与相关

  • ⚙️ 配置模块GetComposerHome 获取全局目录路径,ClearCache 清除全局缓存。
  • 🌐 仓库模块AddGlobalRepository / RemoveGlobalRepository / ListGlobalRepositories 管理全局仓库源。
  • 💻 脚本执行模块:项目级 vendor/bin 二进制执行(ExecExecPHPExecAll)。
  • 📦 依赖管理模块:项目级 Install / Update / DumpAutoload

基于 MIT 许可证发布