🗜️ 归档
把当前项目或指定包打包成 zip / tar 归档,用于离线分发或长期存档。
composer archive 会按依赖解析结果打包项目代码与依赖(不含开发依赖)。Composer Skills 把它封装为「默认 zip」「指定格式」「自定义选项」「指定包」四档灵活度,外加每个包级方法的 WithOptions 变体。
何时使用
- 📦 把项目打成 zip 投递给离线部署环境(无法访问 Packagist)。
- 🗄️ 为某个依赖单独生成 tar 包,归档到制品库。
- 🚚 CI 里在每个 release tag 上自动归档全项目产物。
- 🎛️ 需要排除某些文件(
--ignore-filters)或指定文件名(--file)。
方法签名
| 方法 | 签名 | 说明 |
|---|---|---|
| 🗜️ Archive | func (c *Composer) Archive(destination string) (string, error) | 默认 zip 归档到目录 |
| 🎨 ArchiveWithFormat | func (c *Composer) ArchiveWithFormat(destination string, format string) (string, error) | 指定格式归档 |
| ⚙️ ArchiveWithOptions | func (c *Composer) ArchiveWithOptions(destination string, options map[string]string) (string, error) | 自定义选项 |
| 📦 ArchivePackage | func (c *Composer) ArchivePackage(packageName string, version string, destination string) (string, error) | 归档指定包 |
| ⚙️ ArchivePackageWithOptions | func (c *Composer) ArchivePackageWithOptions(packageName string, version string, destination string, options map[string]string) (string, error) | 自定义选项归档指定包 |
参数说明
Archive / ArchiveWithFormat / ArchiveWithOptions
| 参数 | 类型 | 说明 |
|---|---|---|
destination | string | 目标目录(传给 --dir=) |
format | string | zip 或 tar |
ArchivePackage / ArchivePackageWithOptions
| 参数 | 类型 | 说明 |
|---|---|---|
packageName | string | 要归档的包名,如 symfony/console |
version | string | 版本,空串表示最新 |
destination | string | 目标目录 |
options | map[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 选项(ArchiveWithOptions 的 options["file"])。
ArchivePackage 的版本拼接
version 非空时拼成 packageName=version 传给 composer archive;为空时只传包名,Composer 会选最新版本。
不含开发依赖
composer archive 默认排除 require-dev 的包。若需要把测试工具也打进归档,请改用底层 composer archive --include-dev,或通过 ArchiveWithOptions 传 -- 之外的方式(注意 SDK 的 options 会自动加 -- 前缀,需确认 Composer 是否支持该标志)。