Composer元数据备份需保留三个核心文件:composer.json(声明依赖与配置)、composer.lock(精确记录版本与哈希)、~/.config/composer/config.json或~/.composer/config.json(全局配置,含私有源凭证),缺一不可。

composer 本身没有 backup、export 或 dump-config 这类内置命令,所谓“备份元数据”必须手动提取关键文件——它不存数据库,也不生成快照,所有配置和依赖关系都明文落在几个小文件里。
哪些文件算 Composer 元数据
Composer 的元数据 = 可复现依赖状态的最小文件集合。核心就三个:
-
composer.json:你声明的依赖、脚本、autoload 规则等,是项目意图的唯一来源 -
composer.lock:精确记录每个包的版本、哈希、依赖树,没有它,composer install就无法保证可重现 -
~/.composer/config.json(或~/.config/composer/config.json):全局配置,比如私有仓库地址、认证 token、镜像源等
其他如 vendor/ 是产物,不是元数据;.composer/cache/ 是临时加速用的,删了不影响还原逻辑。
如何用命令行快速备份这三类文件
别写复杂脚本,一行 cp 或 tar 就够,关键是路径要对、权限要通:
- 项目级元数据(进项目目录执行):
cp composer.json composer.lock /backup/path/ - 全局配置(检查实际路径再操作):
composer config -g --list | grep "home\|config"看输出,再cp ~/.config/composer/config.json /backup/path/(新版 Ubuntu/Debian 默认走~/.config/composer,CentOS 多还在~/.composer) - 打包成单个归档(推荐):
tar -czf composer-meta-$(date +%Y%m%d).tar.gz composer.json composer.lock ~/.config/composer/config.json 2>/dev/null || tar -czf composer-meta-$(date +%Y%m%d).tar.gz composer.json composer.lock ~/.composer/config.json—— 这条命令自动 fallback 到旧路径,避免因路径差异失败
为什么不能只备份 composer.json
因为 composer.json 只写 "monolog/monolog": "^3.0" 这种模糊约束,而 composer.lock 记着具体安装的是 3.5.1 还是 3.4.9,连 tarball 的 SHA256 都存着。一旦丢掉 lock 文件:
-
composer install会退化成composer update行为,可能拉下破坏性更新 - 不同机器
install出来的vendor/内容不一致,CI/CD 构建失败或行为漂移 - 安全审计失效:你没法确认线上跑的到底是哪个 commit 或 patch 版本
备份后怎么验证有效性
备份不是扔进硬盘就完事,得能还原且通过基础校验:
- 解压后进目录,运行
composer validate:检查composer.json格式和字段合法性 - 运行
composer install --no-install(或composer install --dry-run,取决于版本):它会读lock并模拟安装流程,不真写vendor/,但会报错如果lock里引用的包已不可达或哈希不匹配 - 比对
composer show --locked | head -n5和原始环境输出是否一致(需在同网络/源配置下)
真正容易被忽略的是全局配置里的私有源凭证——config.json 里若含 http-basic 或 github-oauth 字段,备份时务必确认目标位置权限严格(chmod 600),否则等于泄露凭据。











