Skip to content

⚙️ 配置

Composer SDK 的配置模块负责 composer config 子命令的全部能力——校验、缓存、配置项读写、来源追踪、平台要求检查,以及结构化的 config --list 解析。所有方法都挂在核心类型 Composer 上,定义在 pkg/composer/config.go

与 composer.json 文件操作的区别

本页方法走的是 composer config 子命令(会真正调用 composer 二进制并影响全局/项目配置)。如果你只想纯文件读写 composer.json 中的 config 字段或顶级属性,请看 composer.json 操作ReadComposerJSONSetConfigSetPropertyAddRequire 等)。

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

能力一览 ⚙️

方法作用返回值
Validate验证 composer.json 是否有效error
GetComposerHome获取 Composer 主目录(string, error)
ClearCache清除 Composer 缓存error
GetConfigWithGlobal读取指定配置项,可选全局(string, error)
SetConfigWithGlobal设置指定配置项,可选全局error
ListConfig列出所有配置值(string, error)
ListConfigWithGlobal列出全局或项目配置(string, error)
GetConfigSource查询配置项的来源文件(string, error)
CheckPlatformReqs检查平台要求(string, error)
ValidateComposerJson带选项校验 composer.jsonerror
GetConfigStructured列出配置并以结构化结果返回(*ConfigResult, error)

⚙️ Validate

验证 composer.json 是否有效,等价于 composer validate

何时使用

在写入或修改 composer.json 后、提交代码前,确认文件结构与字段合法时使用。

签名

go
func (c *Composer) Validate() error

返回值

  • 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)
	}

	if err := comp.Validate(); err != nil {
		log.Fatalf("composer.json 无效: %v", err)
	}
	fmt.Println("composer.json 校验通过")
}

进阶

需要更细粒度校验时使用 ValidateComposerJson(strict, withDependencies),或参考 校验模块 中的 ValidateStrictValidateSchemaValidateQuiet 等变体。


⚙️ GetComposerHome

获取 Composer 主目录,等价于 composer config --global home

何时使用

需要定位 Composer 全局配置文件、全局 vendor 目录或 auth.json 时使用。

签名

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

返回值

  • string:Composer 主目录路径(已去除首尾空白)。
  • error:获取失败时返回的错误。

示例

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

便捷别名

便捷查询模块 中的 GetComposerHomeDir 提供相同能力,并额外提供 GetCacheDirGetVendorDirGetBinDir 等目录定位方法。


⚙️ ClearCache

清除 Composer 缓存,等价于 composer clear-cache

何时使用

遇到包下载损坏、镜像同步滞后、磁盘空间紧张时使用。

签名

go
func (c *Composer) ClearCache() error

返回值

  • error:清除过程中发生的错误。

示例

go
if err := comp.ClearCache(); err != nil {
	log.Fatalf("清除缓存失败: %v", err)
}
fmt.Println("缓存已清空")

⚙️ GetConfigWithGlobal

获取 Composer 配置项的值,可选择读取全局配置,等价于 composer config [--global] setting

何时使用

需要在程序里读取某个配置项(如 process-timeoutpreferred-installbin-dir)时使用。

签名

go
func (c *Composer) GetConfigWithGlobal(setting string, global bool) (string, error)

参数

参数类型说明
settingstring配置项名称,如 process-timeout
globalbooltrue 读取全局配置,false 读取项目配置

返回值

  • string:配置项的值(已去除首尾空白)。
  • error:获取失败时返回的错误。

示例

go
// 读取项目级 process-timeout
timeout, err := comp.GetConfigWithGlobal("process-timeout", false)
if err != nil {
	log.Fatalf("读取配置失败: %v", err)
}
fmt.Printf("process-timeout = %s\n", timeout)

// 读取全局 bin-dir
binDir, err := comp.GetConfigWithGlobal("bin-dir", true)
if err != nil {
	log.Fatalf("读取全局配置失败: %v", err)
}
fmt.Printf("全局 bin-dir = %s\n", binDir)

⚙️ SetConfigWithGlobal

设置 Composer 配置项的值,可选择写入全局配置,等价于 composer config [--global] setting value

何时使用

需要程序化调整某个配置项时使用——例如 CI 里把 preferred-install 切成 dist,或初始化容器时设置全局 bin-dir

签名

go
func (c *Composer) SetConfigWithGlobal(setting string, value string, global bool) error

参数

参数类型说明
settingstring配置项名称
valuestring要设置的值
globalbooltrue 写入全局配置,false 写入项目配置

返回值

  • error:设置失败时返回的错误。

示例

go
// 全局设置 preferred-install 为 dist
if err := comp.SetConfigWithGlobal("preferred-install", "dist", true); err != nil {
	log.Fatalf("设置全局配置失败: %v", err)
}

// 项目级设置 process-timeout
if err := comp.SetConfigWithGlobal("process-timeout", "300", false); err != nil {
	log.Fatalf("设置项目配置失败: %v", err)
}

写入位置

global=false 时值写入当前项目的 composer.jsonconfig 字段;global=true 时写入全局 config.json。请确认 Composer 的工作目录正确。


⚙️ ListConfig

列出所有配置值,等价于 composer config --list

何时使用

需要一次性查看当前项目所有 Composer 配置项及其值时使用,常用于调试与诊断。

签名

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

返回值

  • string:所有配置值的列表(原始输出)。
  • error:列出配置失败时返回的错误(已包裹为"列出配置失败")。

示例

go
output, err := comp.ListConfig()
if err != nil {
	log.Fatalf("列出配置失败: %v", err)
}
fmt.Println("配置列表:")
fmt.Println(output)

进阶

需要结构化结果(按 Key/Value/Source 拆分)时使用 GetConfigStructured;需要区分全局/项目时使用 ListConfigWithGlobal


⚙️ ListConfigWithGlobal

列出所有配置值,可选择列出全局配置或项目配置,等价于 composer config --list [--global]

何时使用

需要分别查看全局与项目级配置时使用——例如排查某个配置项被哪一层覆盖。

签名

go
func (c *Composer) ListConfigWithGlobal(global bool) (string, error)

参数

参数类型说明
globalbooltrue 列出全局配置,false 列出项目配置

返回值

  • string:配置值列表。
  • error:列出配置失败时返回的错误。

示例

go
// 列出全局配置
globalCfg, err := comp.ListConfigWithGlobal(true)
if err != nil {
	log.Fatalf("列出全局配置失败: %v", err)
}
fmt.Println("全局配置:")
fmt.Println(globalCfg)

// 列出项目配置
projectCfg, err := comp.ListConfigWithGlobal(false)
if err != nil {
	log.Fatalf("列出项目配置失败: %v", err)
}
fmt.Println("项目配置:")
fmt.Println(projectCfg)

⚙️ GetConfigSource

获取指定配置项的来源信息,等价于 composer config key --source

何时使用

调试配置问题时使用——它能告诉你某个值是从项目 composer.json、全局 config.json 还是默认值加载的。

签名

go
func (c *Composer) GetConfigSource(key string) (string, error)

参数

参数类型说明
keystring要查询来源的配置项名称

返回值

  • string:配置项的来源信息(已去除首尾空白)。
  • error:获取失败时返回的错误(已包裹为"获取配置来源失败")。

示例

go
source, err := comp.GetConfigSource("preferred-install")
if err != nil {
	log.Fatalf("获取配置来源失败: %v", err)
}
fmt.Printf("preferred-install 的来源: %s\n", source)

⚙️ CheckPlatformReqs

检查平台要求,等价于 composer check-platform-reqs

何时使用

部署前确认当前 PHP 版本与扩展满足项目(含依赖)的平台要求时使用。

签名

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

返回值

  • string:平台要求检查的原始输出。
  • error:检查失败时返回的错误。

示例

go
output, err := comp.CheckPlatformReqs()
if err != nil {
	log.Fatalf("平台要求检查失败: %v", err)
}
fmt.Println(output)

进阶

需要结构化结果(每条要求的 Package/Version/Status/Required)时使用 CheckPlatformReqsStructured(定义在 result_types.go,返回 *PlatformCheckResult);如需带格式输出可参考 CheckPlatformReqsWithFormatadditional_methods.go)。


⚙️ ValidateComposerJson

带选项校验 composer.json,等价于 composer validate [--strict] [--with-dependencies]

何时使用

需要严格模式校验、或连带检查依赖的 composer.json 合法性时使用。

签名

go
func (c *Composer) ValidateComposerJson(strict bool, withDependencies bool) error

参数

参数类型说明
strictbooltrue 启用 --strict 严格模式
withDependenciesbooltrue 连带检查依赖包的 composer.json

返回值

  • error:校验失败时返回的错误。

示例

go
// 严格模式 + 连带检查依赖
if err := comp.ValidateComposerJson(true, true); err != nil {
	log.Fatalf("校验失败: %v", err)
}
fmt.Println("composer.json 及其依赖均校验通过")

⚙️ GetConfigStructured

列出配置并以结构化结果返回。内部执行 composer config --list 后用 ParseConfigList 解析。

何时使用

需要在程序里遍历配置项并按 Key/Value/Source 处理时使用——例如生成配置报告、对比两套环境差异。

签名

go
func (c *Composer) GetConfigStructured() (*ConfigResult, error)

返回值

  • *ConfigResult:结构化配置结果,Items[]ConfigItem
  • error:执行或解析错误。

示例

go
result, err := comp.GetConfigStructured()
if err != nil {
	log.Fatalf("获取结构化配置失败: %v", err)
}
for _, item := range result.Items {
	fmt.Printf("%s = %s\n", item.Key, item.Value)
}

⚙️ ConfigItem / ConfigResult 类型

GetConfigStructured 返回的结构体,定义在 pkg/composer/result_types.go

go
type ConfigItem struct {
	Key    string `json:"key"`
	Value  string `json:"value"`
	Source string `json:"source,omitempty"`
}

type ConfigResult struct {
	Items []ConfigItem `json:"items,omitempty"`
}
类型字段说明
ConfigItemKey配置项名称
ConfigItemValue配置项值
ConfigItemSource来源信息(可能为空)
ConfigResultItems全部配置项列表

解析逻辑

ParseConfigList 按行分割 composer config --list 的输出,每行按首个空格切成 KeyValue 两段。空行会被跳过。


📄 与 composer.json 文件操作的联动

配置模块走 composer config 子命令,而下面这些方法(来自 composer_json.go)走纯文件读写,二者互补:

方法签名作用
ReadComposerJSONfunc (c *Composer) ReadComposerJSON() (*ComposerJSON, error)读取并解析整个 composer.json
WriteComposerJSONfunc (c *Composer) WriteComposerJSON(composerJSON *ComposerJSON) error把结构体写回 composer.json
AddRequirefunc (c *Composer) AddRequire(packageName, version string, isDev bool) error追加依赖到 require/require-dev
AddScriptfunc (c *Composer) AddScript(name string, script interface{}, description string) error添加脚本及可选描述
AddAutoloadfunc (c *Composer) AddAutoload(type_ string, namespace string, paths interface{}, isDev bool) error添加自动加载规则
SetConfigfunc (c *Composer) SetConfig(key string, value interface{}) error设置 composer.jsonconfig 字段
GetConfigfunc (c *Composer) GetConfig(key string) (interface{}, error)读取 composer.jsonconfig 字段
SetPropertyfunc (c *Composer) SetProperty(property string, value interface{}) error设置顶级属性(name/description/type 等)

SetConfig vs SetConfigWithGlobal

  • SetConfig(key, value)composer_json.go):直接改 composer.json 文件的 config 字段,不调用 composer,值可以是任意 interface{}(数字、布尔、对象)。
  • SetConfigWithGlobal(setting, value, global)config.go,本页):走 composer config 命令,值只能是 string,可写全局。

按需选择:批量结构化写入用前者,单条命令式写入用后者。

以上方法的完整签名、参数、示例与注意事项请见 composer.json 操作


进阶与相关

  • 📄 composer.json 操作:纯文件读写 composer.json 的全部方法。
  • 校验模块ValidateStrictValidateSchemaValidateComposerLock 等更细粒度的校验变体。
  • 🧱 平台模块CheckPlatformGetPHPVersionHasExtension 等平台检查能力。
  • 🏗️ 仓库模块SetPreferredInstallSetMinimumStabilitySetPreferStable 等通过 composer config 修改仓库与稳定性相关配置的方法。

基于 MIT 许可证发布