Composer怎么导出json配置 Composer怎么备份依赖列表【导出】

3次阅读

Composer怎么导出json配置 Composer怎么备份依赖列表【导出】

composer install 时怎么确保用的是 lock 文件里的版本

这是导出配置的前提——如果 composer install 没走 composer.lock,那导出的就不是实际运行的依赖。默认它确实会优先读 lock,但有两个常见破坏点:

  • 项目里没提交 composer.lock,或者你本地删了它,composer install 就会退化成 composer update 行为,重新解析最新兼容版本
  • 执行过 composer update 但没提交新 lock,别人拉代码后 install 的其实是旧 lock 里的旧版本,和你本地不一致

验证方法很简单:运行 composer install --dry-run,看输出里有没有 “Installing” 行;如果有且没报错,说明 lock 可用。否则先 git checkout composer.lock 或让队友推一次 lock。

composer.json 不含 dev 依赖,怎么导出完整运行时依赖列表

composer.json 默认只声明 require,但很多工具链(比如 CI 构建、docker 镜像打包)需要知道「实际跑起来到底装了哪些包」,包括 require-dev 里那些测试、Linter 工具。这时候不能只靠看 json 文件。

  • composer show --locked --format=json 输出的是 lock 文件解析后的完整包列表(含 dev),JSON 格式可直接重定向保存:composer show --locked --format=json > dependencies.json
  • 如果只要包名+版本(更轻量),用 composer show --locked --no-ansi | sed 's/ */ /g' | cut -d' ' -f1,2 提取两列,再转成 JSON 也行
  • 注意:--locked 是关键,漏掉就变成查当前 composer.json 声明,不是真实安装状态

导出的 JSON 怎么用于离线环境或审计

导出的 JSON 本质是快照,但它不含下载地址、校验和、源类型等元数据,所以不能直接给 composer install --no-network 用。它更适合人工核对或脚本消费。

  • 审计场景:对比两个环境的 dependencies.json 差异,用 diff -u old.json new.json | grep '^+[a-z]' 快速抓新增包
  • 离线部署:得配合 composer install --no-install + composer archive 打 zip 包,或者用 composer install --prefer-dist --no-scripts 后打包 vendor/
  • 安全扫描:有些 SCA 工具(如 phpstan 插件、roave/security-advisories)能直接读取 lock 文件,比 JSON 更可靠

为什么不用 composer dump-autoload 导出依赖关系

composer dump-autoload 生成的是自动加载映射(vendor/autoload.php 相关),和依赖列表完全无关。有人误以为它能“导出配置”,其实只是刷新类加载器。

  • 它不改变 composer.jsoncomposer.lock,也不输出任何依赖信息
  • 执行后看不到任何包名或版本,只有 “Generating autoload files” 这类提示
  • 真要检查 autoloading 是否生效,用 composer dump-autoload --no-scripts --dry-run 看是否报错即可

真正要备份或迁移依赖,盯死 composer.jsoncomposer.lock 两个文件就行,JSON 导出只是辅助手段,别把它当权威来源——lock 文件才是唯一真相。

text=ZqhQzanResources