Skip to content

🗜️ 归档

把当前项目或指定包打包成 zip / tar 归档,用于离线分发或长期存档。

composer archive 会按依赖解析结果打包项目代码与依赖(不含开发依赖)。Composer Skills 把它封装为「默认 zip」「指定格式」「自定义选项」「指定包」四档灵活度,外加每个包级方法的 WithOptions 变体。

何时使用

  • 📦 把项目打成 zip 投递给离线部署环境(无法访问 Packagist)。
  • 🗄️ 为某个依赖单独生成 tar 包,归档到制品库。
  • 🚚 CI 里在每个 release tag 上自动归档全项目产物。
  • 🎛️ 需要排除某些文件(--ignore-filters)或指定文件名(--file)。

方法签名

方法签名说明
🗜️ Archivefunc (c *Composer) Archive(destination string) (string, error)默认 zip 归档到目录
🎨 ArchiveWithFormatfunc (c *Composer) ArchiveWithFormat(destination string, format string) (string, error)指定格式归档
⚙️ ArchiveWithOptionsfunc (c *Composer) ArchiveWithOptions(destination string, options map[string]string) (string, error)自定义选项
📦 ArchivePackagefunc (c *Composer) ArchivePackage(packageName string, version string, destination string) (string, error)归档指定包
⚙️ ArchivePackageWithOptionsfunc (c *Composer) ArchivePackageWithOptions(packageName string, version string, destination string, options map[string]string) (string, error)自定义选项归档指定包

参数说明

Archive / ArchiveWithFormat / ArchiveWithOptions

参数类型说明
destinationstring目标目录(传给 --dir=
formatstringziptar

ArchivePackage / ArchivePackageWithOptions

参数类型说明
packageNamestring要归档的包名,如 symfony/console
versionstring版本,空串表示最新
destinationstring目标目录
optionsmap[string]string额外选项

示例

归档当前项目为 zip

go
package main

import (
	"fmt"
	"log"

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

func main() {
	comp, err := composer.New(composer.DefaultOptions())
	if err != nil {
		log.Fatal(err)
	}

	out, err := comp.Archive("/tmp/releases")
	if err != nil {
		log.Fatalf("归档失败: %v", err)
	}
	fmt.Println(out)
}

用 tar 格式归档

go
out, err := comp.ArchiveWithFormat("/tmp/releases", "tar")
if err != nil {
	log.Fatal(err)
}
fmt.Println(out)

自定义文件名与忽略过滤

go
out, err := comp.ArchiveWithOptions("/tmp/releases", map[string]string{
	"format":          "tar",
	"file":            "my-app.tar",
	"ignore-filters": "",
})
if err != nil {
	log.Fatal(err)
}
fmt.Println(out)

归档指定版本的包

go
out, err := comp.ArchivePackage("symfony/console", "v5.4.0", "/tmp/pkg-archives")
if err != nil {
	log.Fatal(err)
}
fmt.Println(out)

归档最新版并指定格式

go
out, err := comp.ArchivePackageWithOptions(
	"symfony/console",
	"",                  // 空 = 最新版
	"/tmp/pkg-archives",
	map[string]string{"format": "tar"},
)
if err != nil {
	log.Fatal(err)
}
fmt.Println(out)

进阶

destination 是目录不是文件

所有方法的 destination 会被包装成 --dir=<destination>,即归档目录而非文件名。想要指定文件名请用 --file 选项(ArchiveWithOptionsoptions["file"])。

ArchivePackage 的版本拼接

version 非空时拼成 packageName=version 传给 composer archive;为空时只传包名,Composer 会选最新版本。

不含开发依赖

composer archive 默认排除 require-dev 的包。若需要把测试工具也打进归档,请改用底层 composer archive --include-dev,或通过 ArchiveWithOptions-- 之外的方式(注意 SDK 的 options 会自动加 -- 前缀,需确认 Composer 是否支持该标志)。

基于 MIT 许可证发布