composer

package
v0.0.0-...-532670f Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 29, 2025 License: MIT Imports: 13 Imported by: 0

Documentation

Overview

Package composer 提供用于解析和操作PHP Composer JSON文件的功能。

此包允许开发者: - 将composer.json文件解析为Go结构体 - 创建新的composer.json配置 - 验证包名 - 管理依赖项(添加、删除、检查) - 操作PSR-0/PSR-4自动加载配置 - 将结构体转换回JSON - 保存到文件

Example
// Create a new empty composer.json
composer, err := CreateNew("vendor/project", "Example PHP project")
if err != nil {
	log.Fatalf("Failed to create composer.json: %v", err)
}

// Add dependencies
composer.AddDependency("php", "^8.0")
composer.AddDependency("monolog/monolog", "^2.0")
composer.AddDevDependency("phpunit/phpunit", "^9.0")

// Set up PSR-4 autoloading
psr4Map := make(map[string]interface{})
psr4Map["Vendor\\Project\\"] = "src/"
composer.Autoload.PSR4 = psr4Map

// Convert to JSON and print
jsonStr, _ := composer.ToJSON(true)
fmt.Println(jsonStr)

// Output contains:
// "name": "vendor/project",
// "description": "Example PHP project",
Example (ParseExisting)
// Sample composer.json content
jsonStr := `{
		"name": "vendor/existing-project",
		"require": {
			"php": "^7.4"
		}
	}`

// Parse from string
composer, err := ParseString(jsonStr)
if err != nil {
	log.Fatalf("Failed to parse composer.json: %v", err)
}

// Check if a dependency exists
if composer.DependencyExists("php") {
	fmt.Println("PHP dependency exists with version:", composer.Require["php"])
}

// Add more dependencies
composer.AddDependency("symfony/console", "^5.0")
Output:

PHP dependency exists with version: ^7.4
Example (SaveAndLoad)
// Create a temporary directory for the example
tmpDir, err := os.MkdirTemp("", "composer-example")
if err != nil {
	log.Fatalf("Failed to create temp directory: %v", err)
}
defer os.RemoveAll(tmpDir)

// Create a new composer.json
composer, _ := CreateNew("vendor/save-example", "Example for saving and loading")
composer.AddDependency("php", "^8.0")

// Save to file
filePath := filepath.Join(tmpDir, "composer.json")
if err := composer.Save(filePath, true); err != nil {
	log.Fatalf("Failed to save composer.json: %v", err)
}
fmt.Println("Saved composer.json")

// Load from file
loadedComposer, err := ParseFile(filePath)
if err != nil {
	log.Fatalf("Failed to load composer.json: %v", err)
}
fmt.Println("Loaded composer.json for:", loadedComposer.Name)
Output:

Saved composer.json
Loaded composer.json for: vendor/save-example

Index

Examples

Constants

View Source
const Version = "1.0.0"

包版本

Variables

View Source
var (
	// ErrInvalidJSON 表示JSON格式无效
	ErrInvalidJSON = parser.ErrInvalidJSON

	// ErrFileNotFound 表示composer.json文件未找到
	ErrFileNotFound = parser.ErrFileNotFound

	// ErrReadingFile 表示读取文件时出错
	ErrReadingFile = parser.ErrReadingFile

	// ErrUnmarshallingJSON 表示JSON反序列化时出错
	ErrUnmarshallingJSON = parser.ErrUnmarshallingJSON
)

错误定义

Functions

func CreateBackup

func CreateBackup(filePath string, backupSuffix string) (string, error)

CreateBackup 在修改前创建composer.json的备份

参数:

  • filePath: 原始文件路径
  • backupSuffix: 备份文件后缀(为空时默认使用.bak)

返回:

  • string: 备份文件路径
  • error: 如果备份失败,返回错误

示例:

// 在修改前备份composer.json
backupPath, err := composer.CreateBackup("./composer.json", "")
if err != nil {
	log.Fatal(err)
}
fmt.Printf("已创建备份: %s\n", backupPath) // 输出:已创建备份: ./composer.json.bak

// 使用自定义后缀
backupPath, err = composer.CreateBackup("./composer.json", ".backup")
if err != nil {
	log.Fatal(err)
}
fmt.Printf("已创建备份: %s\n", backupPath) // 输出:已创建备份: ./composer.json.backup

func DefaultConfig

func DefaultConfig() *config.Config

DefaultConfig 返回带有合理默认值的Config

返回:

  • *config.Config: 一个配置好标准默认值的Config对象

示例:

// 创建一个新的composer.json文件
composer, _ := composer.CreateNew("vendor/project", "我的PHP项目")

// 使用默认配置
composer.Config = *composer.DefaultConfig()

// 修改特定配置
composer.Config.ProcessTimeout = 600 // 设置为10分钟
composer.Config.VendorDir = "lib"    // 更改vendor目录

// 保存修改
composer.Save("./composer.json", true)

func NewRepository

func NewRepository(repoType, url string) *repository.Repository

NewRepository 创建一个新的仓库

参数:

  • repoType: 仓库类型,如"composer"、"vcs"、"path"
  • url: 仓库URL或路径

返回:

  • *repository.Repository: 新创建的仓库对象

示例:

// 创建Packagist仓库
packagist := composer.NewRepository("composer", "https://packagist.org")

// 创建GitHub仓库
githubRepo := composer.NewRepository("vcs", "https://github.com/symfony/console")

// 创建本地路径仓库
localRepo := composer.NewRepository("path", "../my-local-package")

// 向Composer配置添加仓库
composer, _ := composer.ParseFile("./composer.json")
composer.AddRepository(*packagist)
composer.Save("./composer.json", true)

func ValidateComposerJSON

func ValidateComposerJSON(name, description, stability string) error

ValidateComposerJSON 验证ComposerJSON结构体

参数:

  • name: 包名,格式为"vendor/project"
  • description: 包描述
  • stability: 稳定性标识,如"stable"、"beta"、"alpha"、"dev"(可为空)

返回:

  • error: 如果验证失败,返回错误;验证通过返回nil

验证规则:

  • 包名必须符合"vendor/project"格式
  • 描述不能为空
  • 如果提供了稳定性标识,必须是有效值

示例:

// 验证基本信息
err := composer.ValidateComposerJSON("acme/blog", "Acme博客应用", "")
if err != nil {
	fmt.Println("验证失败:", err)
} else {
	fmt.Println("验证通过")
}

// 验证带稳定性标识
err = composer.ValidateComposerJSON("acme/blog", "Acme博客应用", "beta")
if err != nil {
	fmt.Println("验证失败:", err)
} else {
	fmt.Println("验证通过")
}

func ValidateVersion

func ValidateVersion(version string) error

ValidateVersion 验证版本字符串是否符合语义化版本规范

参数:

  • version: 要验证的版本字符串,如"1.0.0"、"^2.1"、">=7.4"

返回:

  • error: 如果验证失败,返回错误;验证通过返回nil

支持的格式:

  • 精确版本: "1.0.0"
  • 范围版本: ">=1.0.0"、"<=2.0.0"、">1.0.0 <2.0.0"
  • 通配符: "1.0.*"
  • 赋值符: "^1.0.0"(兼容1.x.x)、"~1.0.0"(兼容1.0.x)
  • 稳定性标识: "1.0.0-beta"、"1.0.0-RC1"

示例:

// 验证不同类型的版本字符串
versions := []string{
	"1.0.0",       // 精确版本
	"^1.0.0",      // 赋值符版本
	">=7.4",       // 范围版本
	"1.0.*",       // 通配符版本
	"1.0.0-beta1", // 带稳定性标识的版本
	"invalid",     // 无效版本
}

for _, v := range versions {
	err := composer.ValidateVersion(v)
	if err != nil {
		fmt.Printf("版本'%s'无效: %v\n", v, err)
	} else {
		fmt.Printf("版本'%s'有效\n", v)
	}
}

Types

type Author

type Author struct {
	// Name 作者姓名(必填)
	Name string `json:"name,omitempty"`

	// Email 作者邮箱
	Email string `json:"email,omitempty"`

	// Homepage 作者个人主页
	Homepage string `json:"homepage,omitempty"`

	// Role 在项目中的角色,如"Developer"、"Maintainer"
	Role string `json:"role,omitempty"`
}

Author 表示Composer包的作者信息

示例:

{
  "name": "张三",
  "email": "zhangsan@example.com",
  "homepage": "https://example.com",
  "role": "Developer"
}

type ComposerJSON

type ComposerJSON struct {
	// Name 包名,格式为"vendor/project",如"symfony/console"
	Name string `json:"name,omitempty"`

	// Description 项目描述
	Description string `json:"description,omitempty"`

	// Type 包类型,如"library"、"project"、"metapackage"、"composer-plugin"
	Type string `json:"type,omitempty"`

	// Keywords 关键词数组,用于Packagist搜索
	Keywords []string `json:"keywords,omitempty"`

	// Homepage 项目主页URL
	Homepage string `json:"homepage,omitempty"`

	// Version 版本号(通常由VCS标签自动确定,很少在composer.json中手动指定)
	Version string `json:"version,omitempty"`

	// License 许可证,可以是单个字符串或字符串数组
	License interface{} `json:"license,omitempty"` // 可以是字符串或字符串数组

	// Authors 作者信息数组
	Authors []Author `json:"authors,omitempty"`

	// Support 支持信息
	Support Support `json:"support,omitempty"`

	// Require 运行时依赖,key为包名,value为版本约束
	Require map[string]string `json:"require,omitempty"`

	// RequireDev 开发时依赖,key为包名,value为版本约束
	RequireDev map[string]string `json:"require-dev,omitempty"`

	// Conflict 冲突依赖,指定与当前包冲突的包和版本
	Conflict map[string]string `json:"conflict,omitempty"`

	// Replace 替换依赖,指定当前包可以替代的其他包和版本
	Replace map[string]string `json:"replace,omitempty"`

	// Provide 提供依赖,指定当前包可以满足的其他包的需求
	Provide map[string]string `json:"provide,omitempty"`

	// Suggest 建议依赖,推荐但非必需的包
	Suggest map[string]string `json:"suggest,omitempty"`

	// Autoload 自动加载配置,包含PSR-4、PSR-0、classmap等
	Autoload autoload.Autoload `json:"autoload,omitempty"`

	// AutoloadDev 开发时自动加载配置,通常用于测试代码
	AutoloadDev autoload.Autoload `json:"autoload-dev,omitempty"`

	// Repositories 自定义包仓库配置
	Repositories []repository.Repository `json:"repositories,omitempty"`

	// Config Composer配置选项
	Config config.Config `json:"config,omitempty"`

	// Scripts Composer脚本定义,可以是字符串或字符串数组
	Scripts map[string]interface{} `json:"scripts,omitempty"`

	// ScriptsDescriptions 脚本的说明文本
	ScriptsDescriptions map[string]string `json:"scripts-descriptions,omitempty"`

	// Extra 附加元数据,供第三方工具使用
	Extra map[string]interface{} `json:"extra,omitempty"`

	// Bin 可执行文件列表,会被软链接到vendor/bin目录
	Bin []string `json:"bin,omitempty"`

	// Archive 打包时的配置,如排除文件
	Archive archive.Archive `json:"archive,omitempty"`

	// Abandoned 标记包已被废弃,可以是布尔值或推荐替代包的字符串
	Abandoned interface{} `json:"abandoned,omitempty"` // 可以是布尔值或字符串

	// NonFeatureBranches 指定哪些分支不应被视为功能分支
	NonFeatureBranches []string `json:"non-feature-branches,omitempty"`

	// MinimumStability 最低稳定性要求,如"stable"、"RC"、"beta"、"alpha"、"dev"
	MinimumStability string `json:"minimum-stability,omitempty"`

	// PreferStable 优先使用稳定版本
	PreferStable bool `json:"prefer-stable,omitempty"`
}

ComposerJSON 表示composer.json文件的根结构

该结构体映射了PHP Composer项目中composer.json文件的所有可能字段, 允许通过Go代码读取和修改PHP项目的依赖管理配置。

示例:

{
  "name": "vendor/project",
  "description": "项目描述",
  "type": "library",
  "require": {
    "php": ">=7.4",
    "symfony/console": "^5.4"
  },
  "autoload": {
    "psr-4": {
      "App\\": "src/"
    }
  }
}

func CreateLibrary

func CreateLibrary(name, description, phpVersion string) (*ComposerJSON, error)

CreateLibrary 创建一个新的PHP库composer.json结构体

参数:

  • name: 包名,格式为"vendor/project"
  • description: 包描述
  • phpVersion: PHP版本要求,例如"^7.4"(为空时默认使用"^7.4")

返回:

  • *ComposerJSON: 创建的结构体
  • error: 如果创建失败,返回错误

特点:

  • Type设置为"library"
  • 适合创建可复用的PHP库/组件
  • 基于包名自动生成PSR-4命名空间映射

示例:

// 创建一个PHP库
composer, err := composer.CreateLibrary("acme/utils", "Acme实用工具集", "^7.4")
if err != nil {
	log.Fatal(err)
}

// 添加库依赖
composer.AddDependency("symfony/http-foundation", "^5.4")

// 设置更多自动加载规则
composer.SetPSR4("Acme\\Utils\\Tests\\", "tests/")

// 保存到文件
composer.Save("composer.json", true)

// 库的composer.json会包含类似以下内容:
// {
//   "name": "acme/utils",
//   "description": "Acme实用工具集",
//   "type": "library",
//   "require": {
//     "php": "^7.4",
//     "symfony/http-foundation": "^5.4"
//   },
//   "autoload": {
//     "psr-4": {
//       "Acme\\Utils\\": "src/",
//       "Acme\\Utils\\Tests\\": "tests/"
//     }
//   }
// }

func CreateNew

func CreateNew(name, description string) (*ComposerJSON, error)

CreateNew 创建一个新的空composer.json结构体,并设置基本字段

参数:

  • name: 包名,格式为"vendor/project"
  • description: 包描述

返回:

  • *ComposerJSON: 创建的结构体
  • error: 如果创建失败,返回错误

默认值:

  • Type: "library"
  • License: "MIT"
  • Autoload.PSR4: 基于包名自动生成,如"Vendor\\Project\\"对应"src/"

示例:

// 创建一个基本的Composer包
composer, err := composer.CreateNew("vendor/project", "一个示例PHP包")
if err != nil {
	log.Fatal(err)
}

// 查看生成的命名空间
psr4, ok := composer.GetPSR4Map()
if ok {
	fmt.Println("PSR-4命名空间:", psr4) // 输出: PSR-4命名空间: map[Vendor\Project\:src/]
}

// 保存到文件
composer.Save("composer.json", true)

func CreateProject

func CreateProject(name, description, phpVersion string) (*ComposerJSON, error)

CreateProject 创建一个新的PHP项目composer.json结构体

参数:

  • name: 包名,格式为"vendor/project"
  • description: 包描述
  • phpVersion: PHP版本要求,例如"^7.4"(为空时默认使用"^7.4")

返回:

  • *ComposerJSON: 创建的结构体
  • error: 如果创建失败,返回错误

特点:

  • Type设置为"project"
  • 自动添加phpunit/phpunit作为开发依赖
  • 基于包名自动生成PSR-4命名空间映射

示例:

// 创建一个PHP项目
composer, err := composer.CreateProject("acme/blog", "Acme博客应用", "^8.0")
if err != nil {
	log.Fatal(err)
}

// 添加框架依赖
composer.AddDependency("symfony/framework-bundle", "^5.4")
composer.AddDependency("doctrine/orm", "^2.10")

// 添加更多开发依赖
composer.AddDevDependency("symfony/phpunit-bridge", "^5.4")

// 保存到文件
composer.Save("composer.json", true)

func Parse

func Parse(r io.Reader) (*ComposerJSON, error)

Parse 从io.Reader读取JSON并解析为ComposerJSON结构体

参数:

  • r: io.Reader接口,可以是文件、字符串等

返回:

  • *ComposerJSON: 解析后的结构体
  • error: 如果解析失败,返回错误

示例:

file, err := os.Open("composer.json")
if err != nil {
	log.Fatal(err)
}
defer file.Close()

composer, err := composer.Parse(file)
if err != nil {
	log.Fatal(err)
}

// 也可以从HTTP响应体解析
resp, err := http.Get("https://example.com/composer.json")
if err != nil {
	log.Fatal(err)
}
defer resp.Body.Close()

composer, err = composer.Parse(resp.Body)

func ParseDir

func ParseDir(dir string) (*ComposerJSON, error)

ParseDir 在指定目录中查找并解析composer.json文件

参数:

  • dir: 要查找composer.json的目录路径

返回:

  • *ComposerJSON: 解析后的结构体
  • error: 如果解析失败,返回错误

示例:

// 解析当前项目的composer.json
composer, err := composer.ParseDir(".")
if err != nil {
	log.Fatal(err)
}
// 解析指定PHP项目的composer.json
composer, err = composer.ParseDir("/path/to/php/project")
if err != nil {
	log.Fatal(err)
}

func ParseFile

func ParseFile(filePath string) (*ComposerJSON, error)

ParseFile 从文件路径解析composer.json文件

参数:

  • filePath: composer.json文件路径

返回:

  • *ComposerJSON: 解析后的结构体
  • error: 如果解析失败,返回错误

示例:

composer, err := composer.ParseFile("./composer.json")
if err != nil {
	log.Fatal(err)
}
fmt.Println("包名:", composer.Name)
fmt.Println("版本:", composer.Version)
fmt.Println("PHP依赖版本:", composer.Require["php"])

func ParseString

func ParseString(jsonStr string) (*ComposerJSON, error)

ParseString 解析composer.json字符串

参数:

  • jsonStr: 要解析的JSON字符串

返回:

  • *ComposerJSON: 解析后的结构体
  • error: 如果解析失败,返回错误

示例:

jsonStr := `{
	"name": "vendor/project",
	"description": "My composer package",
	"require": {
		"php": ">=7.4"
	}
}`

composer, err := composer.ParseString(jsonStr)
if err != nil {
	log.Fatal(err)
}
fmt.Println("包名:", composer.Name)

func (*ComposerJSON) AddDependency

func (c *ComposerJSON) AddDependency(packageName, version string) error

AddDependency 向require部分添加包

参数:

  • packageName: 要添加的包名,格式为"vendor/package"
  • version: 依赖版本,如"^5.4"、">=7.4"

返回:

  • error: 如果添加失败,返回错误

示例:

composer, _ := composer.ParseFile("./composer.json")

// 添加PHP版本需求
err := composer.AddDependency("php", ">=7.4")
if err != nil {
	log.Fatal(err)
}

// 添加Symfony组件
err = composer.AddDependency("symfony/console", "^5.4")
if err != nil {
	log.Fatal(err)
}

// 保存修改
composer.Save("./composer.json", true)

func (*ComposerJSON) AddDevDependency

func (c *ComposerJSON) AddDevDependency(packageName, version string) error

AddDevDependency 向require-dev部分添加包

参数:

  • packageName: 要添加的包名,格式为"vendor/package"
  • version: 依赖版本,如"^9.0"

返回:

  • error: 如果添加失败,返回错误

示例:

composer, _ := composer.ParseFile("./composer.json")

// 添加测试依赖
err := composer.AddDevDependency("phpunit/phpunit", "^9.0")
if err != nil {
	log.Fatal(err)
}

// 添加代码风格检查工具
err = composer.AddDevDependency("squizlabs/php_codesniffer", "^3.6")
if err != nil {
	log.Fatal(err)
}

// 保存修改
composer.Save("./composer.json", true)

func (*ComposerJSON) AddExclusion

func (c *ComposerJSON) AddExclusion(pattern string)

AddExclusion 向归档排除列表添加路径模式

参数:

  • pattern: 要排除的路径模式,如"/tests"、"/.github"

示例:

composer, _ := composer.ParseFile("./composer.json")

// 排除测试目录和文档
composer.AddExclusion("/tests")
composer.AddExclusion("/docs")
composer.AddExclusion("/.github")

// 保存修改
composer.Save("./composer.json", true)

// composer.json中会包含以下内容:
// "archive": {
//   "exclude": [
//     "/tests",
//     "/docs",
//     "/.github"
//   ]
// }

func (*ComposerJSON) AddRepository

func (c *ComposerJSON) AddRepository(repo repository.Repository)

AddRepository 添加一个仓库到仓库列表

参数:

  • repo: 要添加的仓库对象

示例:

composer, _ := composer.ParseFile("./composer.json")

// 添加自定义Composer仓库
repo := composer.NewRepository("composer", "https://asset-packagist.org")
composer.AddRepository(*repo)

// 添加版本控制系统仓库
vcsRepo := composer.NewRepository("vcs", "https://github.com/myvendor/private-package")
composer.AddRepository(*vcsRepo)

// 保存修改
composer.Save("./composer.json", true)

func (*ComposerJSON) DependencyExists

func (c *ComposerJSON) DependencyExists(packageName string) bool

DependencyExists 检查依赖项是否存在于require部分

参数:

  • packageName: 要检查的包名,如"symfony/console"

返回:

  • bool: 如果依赖项存在返回true,否则返回false

示例:

composer, _ := composer.ParseFile("./composer.json")

if composer.DependencyExists("php") {
	fmt.Println("PHP依赖存在,版本为:", composer.Require["php"])
} else {
	fmt.Println("PHP依赖不存在")
}

func (*ComposerJSON) DevDependencyExists

func (c *ComposerJSON) DevDependencyExists(packageName string) bool

DevDependencyExists 检查依赖项是否存在于require-dev部分

参数:

  • packageName: 要检查的包名,如"phpunit/phpunit"

返回:

  • bool: 如果开发依赖项存在返回true,否则返回false

示例:

composer, _ := composer.ParseFile("./composer.json")

if composer.DevDependencyExists("phpunit/phpunit") {
	fmt.Println("PHPUnit依赖存在,版本为:", composer.RequireDev["phpunit/phpunit"])
} else {
	fmt.Println("PHPUnit依赖不存在")
}

func (*ComposerJSON) GetAllDependencies

func (c *ComposerJSON) GetAllDependencies() map[string]string

GetAllDependencies 返回所有依赖项(require和require-dev合并)

返回:

  • map[string]string: 包含所有依赖的映射,key为包名,value为版本需求

示例:

composer, _ := composer.ParseFile("./composer.json")

allDeps := composer.GetAllDependencies()
fmt.Println("项目共有", len(allDeps), "个依赖项:")

for pkg, version := range allDeps {
	fmt.Printf("- %s: %s\n", pkg, version)
}

func (*ComposerJSON) GetPSR4Map

func (c *ComposerJSON) GetPSR4Map() (map[string]string, bool)

GetPSR4Map 获取PSR-4自动加载命名空间映射

返回:

  • map[string]string: 命名空间到目录的映射,key为命名空间,value为目录路径
  • bool: 是否成功获取映射,如果PSR-4配置不存在或无效则返回false

示例:

composer, _ := composer.ParseFile("./composer.json")

psr4Map, ok := composer.GetPSR4Map()
if !ok {
	fmt.Println("PSR-4配置不存在或无效")
	return
}

fmt.Println("PSR-4自动加载映射:")
for namespace, path := range psr4Map {
	fmt.Printf("- %s => %s\n", namespace, path)
}

func (*ComposerJSON) RemoveDependency

func (c *ComposerJSON) RemoveDependency(packageName string) bool

RemoveDependency 从require部分移除包

参数:

  • packageName: 要移除的包名

返回:

  • bool: 如果成功移除返回true,如果包不存在返回false

示例:

composer, _ := composer.ParseFile("./composer.json")

if composer.RemoveDependency("symfony/console") {
	fmt.Println("成功移除symfony/console")
} else {
	fmt.Println("symfony/console不存在于依赖中")
}

// 保存修改
composer.Save("./composer.json", true)

func (*ComposerJSON) RemoveDevDependency

func (c *ComposerJSON) RemoveDevDependency(packageName string) bool

RemoveDevDependency 从require-dev部分移除包

参数:

  • packageName: 要移除的包名

返回:

  • bool: 如果成功移除返回true,如果包不存在返回false

示例:

composer, _ := composer.ParseFile("./composer.json")

if composer.RemoveDevDependency("phpunit/phpunit") {
	fmt.Println("成功移除phpunit/phpunit")
} else {
	fmt.Println("phpunit/phpunit不存在于开发依赖中")
}

// 保存修改
composer.Save("./composer.json", true)

func (*ComposerJSON) RemoveExclusion

func (c *ComposerJSON) RemoveExclusion(pattern string) bool

RemoveExclusion 从归档排除列表中删除路径模式

参数:

  • pattern: 要移除的路径模式,如"/tests"

返回:

  • bool: 如果成功移除返回true,如果模式不存在返回false

示例:

composer, _ := composer.ParseFile("./composer.json")

if composer.RemoveExclusion("/tests") {
	fmt.Println("成功移除/tests排除模式")
} else {
	fmt.Println("/tests排除模式不存在")
}

// 保存修改
composer.Save("./composer.json", true)

func (*ComposerJSON) RemovePSR4

func (c *ComposerJSON) RemovePSR4(namespace string) bool

RemovePSR4 移除PSR-4命名空间映射

参数:

  • namespace: 要移除的命名空间,必须以\\结尾,如"App\\"

返回:

  • bool: 如果成功移除返回true,如果命名空间不存在返回false

示例:

composer, _ := composer.ParseFile("./composer.json")

if composer.RemovePSR4("App\\Tests\\") {
	fmt.Println("成功移除App\\Tests\\命名空间映射")
} else {
	fmt.Println("App\\Tests\\命名空间映射不存在")
}

// 保存修改
composer.Save("./composer.json", true)

func (*ComposerJSON) Save

func (c *ComposerJSON) Save(filePath string, indent bool) error

Save 将ComposerJSON结构体保存为JSON文件

参数:

  • filePath: 保存的文件路径
  • indent: 是否缩进格式化JSON(true为美化输出,false为紧凑输出)

返回:

  • error: 如果保存失败,返回错误

示例:

// 创建新的composer.json
composer, _ := composer.CreateNew("vendor/project", "我的PHP项目")

// 添加依赖
composer.AddDependency("php", ">=7.4")
composer.AddDependency("symfony/console", "^5.4")

// 保存到文件(带缩进美化格式)
err := composer.Save("./composer.json", true)
if err != nil {
	log.Fatal(err)
}

func (*ComposerJSON) SetPSR4

func (c *ComposerJSON) SetPSR4(namespace, path string)

SetPSR4 设置PSR-4命名空间映射

参数:

  • namespace: 命名空间,必须以\\结尾,如"App\\"
  • path: 目录路径,如"src/"

示例:

composer, _ := composer.ParseFile("./composer.json")

// 设置命名空间映射
composer.SetPSR4("App\\", "src/")
composer.SetPSR4("App\\Tests\\", "tests/")

// 保存修改
composer.Save("./composer.json", true)

// composer.json中会包含以下内容:
// "autoload": {
//   "psr-4": {
//     "App\\": "src/",
//     "App\\Tests\\": "tests/"
//   }
// }

func (*ComposerJSON) ToJSON

func (c *ComposerJSON) ToJSON(indent bool) (string, error)

ToJSON 将ComposerJSON结构体转换为JSON字符串

参数:

  • indent: 是否缩进格式化JSON(true为美化输出,false为紧凑输出)

返回:

  • string: 转换后的JSON字符串
  • error: 如果转换失败,返回错误

示例:

composer, _ := composer.ParseFile("composer.json")

// 美化输出(带缩进)
prettyJSON, err := composer.ToJSON(true)
if err != nil {
	log.Fatal(err)
}
fmt.Println(prettyJSON)

// 紧凑输出(不带缩进)
compactJSON, err := composer.ToJSON(false)
if err != nil {
	log.Fatal(err)
}

type Support

type Support struct {
	// Email 支持邮箱
	Email string `json:"email,omitempty"`

	// Issues 问题跟踪URL
	Issues string `json:"issues,omitempty"`

	// Forum 论坛URL
	Forum string `json:"forum,omitempty"`

	// Wiki Wiki页面URL
	Wiki string `json:"wiki,omitempty"`

	// IRC IRC频道
	IRC string `json:"irc,omitempty"`

	// Source 源代码URL
	Source string `json:"source,omitempty"`

	// Docs 文档URL
	Docs string `json:"docs,omitempty"`

	// Chat 聊天渠道URL
	Chat string `json:"chat,omitempty"`
}

Support 包含包的支持信息

示例:

{
  "email": "support@example.com",
  "issues": "https://github.com/vendor/project/issues",
  "docs": "https://docs.example.com"
}

Directories

Path Synopsis
Package archive provides functionality related to PHP Composer archiving
Package archive provides functionality related to PHP Composer archiving
Package autoload provides functionality related to PHP Composer autoloading
Package autoload provides functionality related to PHP Composer autoloading
Package config provides functionality related to PHP Composer configuration
Package config provides functionality related to PHP Composer configuration
Package dependency 提供与PHP Composer依赖项相关的功能
Package dependency 提供与PHP Composer依赖项相关的功能
Package parser 提供解析PHP Composer JSON文件的功能
Package parser 提供解析PHP Composer JSON文件的功能
Package repository provides functionality related to PHP Composer repositories
Package repository provides functionality related to PHP Composer repositories
Package serializer 提供将PHP Composer结构体序列化为JSON的功能
Package serializer 提供将PHP Composer结构体序列化为JSON的功能
Package validation provides functionality for validating PHP Composer JSON structures
Package validation provides functionality for validating PHP Composer JSON structures

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL