🔧 SetProperty
设置 composer.json 的顶级属性,如项目名、描述、类型、关键词、许可证等。
何时使用
需要在代码中初始化或修改项目元信息时使用。该方法对一组白名单属性做类型安全的赋值,避免手写 JSON。config 段内的键值请改用 SetConfig。
签名
go
func (c *Composer) SetProperty(property string, value interface{}) error参数
| 参数 | 类型 | 说明 |
|---|---|---|
property | string | 属性名,见下表 |
value | interface{} | 属性值,类型须与属性匹配(不匹配时静默忽略) |
支持的属性及其值类型:
| 属性 | 值类型 |
|---|---|
name | string(vendor/package) |
description | string |
type | string(library/project/metapackage 等) |
keywords | []string |
homepage | string(URL) |
license | interface{}(字符串或字符串数组) |
minimum-stability | string(stable/RC/beta/alpha/dev) |
prefer-stable | bool |
返回值
error:读取或写入失败,或属性名不在白名单时返回unsupported property错误。
示例
go
package main
import (
"log"
"github.com/scagogogo/composer-skills/pkg/composer"
)
func main() {
comp, err := composer.New(composer.DefaultOptions())
if err != nil {
log.Fatal(err)
}
if err := comp.SetProperty("name", "myvendor/mypackage"); err != nil {
log.Fatal(err)
}
if err := comp.SetProperty("description", "一个很棒的 PHP 库"); err != nil {
log.Fatal(err)
}
if err := comp.SetProperty("keywords", []string{"php", "library", "awesome"}); err != nil {
log.Fatal(err)
}
if err := comp.SetProperty("license", "MIT"); err != nil {
log.Fatal(err)
}
if err := comp.SetProperty("prefer-stable", true); err != nil {
log.Fatal(err)
}
}进阶
- ⚠️ 未列出的属性名会返回
unsupported property;value类型断言失败时(如把int传给name)方法会静默跳过而不报错,调用方需自行保证类型正确。 - 🔗 设置
config段配置项请用SetConfig;设置仓库、稳定性等可用SetMinimumStability、SetPreferredInstall等专用方法。 - 📖 底层结构见
ComposerJSON(read-composer-json)。