composer没有export或backup命令,备份本质是保留全局配置文件(如~/.composer/config.json)和项目级权威快照(composer.lock),二者缺一不可;其他如composer show等命令仅输出只读快照,无法用于重建环境。

Composer 没有 composer export 或 composer backup 这类命令,所谓“备份”,本质是两件事:**保留全局配置文件本身** + **保留项目级依赖的权威快照(即 composer.lock)**。其他所有导出命令(如 composer show、composer global show)都只是只读快照,不能用于重建环境。
怎么备份 Composer 全局配置(config.json)
全局配置不是靠命令导出的,它就存放在一个 JSON 文件里,直接复制最可靠。
- 先运行
composer config --global --list,看第一行 “Global configuration file” 的路径(Linux/macOS 通常是~/.composer/config.json,Windows 是%APPDATA%\Composer\config.json) - 用
cp或文件管理器复制该文件,强烈建议加时间戳:cp ~/.composer/config.json ~/.composer/config.json.backup-20260512 - 如果设置了
COMPOSER_HOME环境变量,必须确认它指向的位置,否则可能备份了错误路径下的文件 - 别手动新建空
config.json再粘贴内容——JSON 格式极敏感,少个逗号或引号不闭合,后续所有composer命令都会报file_get_contents(): Failed to open stream
怎么备份已全局安装的插件(如 laravel/installer)
全局插件不记录在任何 composer.json 里,重装比复制 vendor/ 更安全。真正要备份的,是「装了哪些包 + 对应版本」这个清单。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 人工核对用:
composer global show --format=plain - 脚本消费用:
composer global show --format=json - 只导出根依赖(排除嵌套依赖):
composer global show --direct --format=plain -
composer global list已废弃,不要用;composer show不带global是查当前项目的,容易混淆
怎么备份当前项目的依赖状态
唯一可复现安装的依据是 composer.lock 文件,它不是“备份配置”,而是“可执行的安装说明书”。composer.json 只是愿望清单,删掉 lock 后跑 composer install 就会退化成 update 行为。
- 必须同时保留
composer.json和composer.lock,缺一不可 - Git 提交时,
composer.lock是必须项,否则协作环境必然不一致 - 跨机器恢复:复制这两个文件 → 运行
composer install --no-dev→ 完全一致 - 验证是否真走 lock:运行
composer install --dry-run,有 “Installing” 行且无报错,说明 lock 可用;否则先git checkout composer.lock
导出依赖列表只是快照,别当部署依据
composer show --locked --format=json 或 jq -r '.packages[] | "\(.name) \(.version)"' composer.lock 这些能生成人工可读或脚本可解析的清单,但它们不含 dist 地址、checksum、PHP 扩展要求等关键元数据,无法替代 composer.lock 驱动安装。
- CI/CD 中只
COPY composer.json而跳过composer.lock,会导致每次构建都重新 resolve,版本漂移风险极高 - Dockerfile 中
COPY顺序必须是:先composer.json+composer.lock,再RUN composer install --no-dev --no-interaction - 想审计差异?用
diff -u old.json new.json | grep '^\+[a-z]'抓新增包;但别指望靠它还原环境
最容易被忽略的一点:composer show 输出的是当前 vendor/ 状态,而 composer.lock 是权威快照——两者可能不一致(比如 lock 文件存在但没执行过 install)。所以备份动作本身不难,难的是让团队所有人理解并维护好这层语义关系。










