Composer本身从不自动修改composer.json,仅三种操作会改写:composer require添加依赖、composer remove移除依赖、手动编辑后保存;其他看似“自动”变动均源于CI脚本、IDE插件或误将composer.lock变化混淆为composer.json变更。

composer.json 不会“自动更新”——它只在你明确执行命令时才被修改,任何看似“自动”的变动,背后都有可追溯的触发源。
哪些操作会改写 composer.json?
Composer 本身从不主动修改 composer.json。只有以下三种情况会导致它变化:
-
composer require vendor/name:添加依赖时默认写入require字段(加--dev则写require-dev) -
composer remove vendor/name:移除依赖时自动删对应行 - 你手动编辑后保存——但此时不会自动生效,必须配合
composer install或composer update
注意:composer update 只改 composer.lock,不碰 composer.json;composer install 完全不改这两个文件。
为什么 composer.json 看起来“被自动改了”?
常见错觉来源:
DMap GL地图JSAPI(dmapgl)开发指南。用于编写、审查、调试 DMap 地图 API 代码,涵盖地图初始化、覆盖物渲染、图层管理、事件处理、控件交互等任务。当用户提及 dmap、dmapgl、jsapi‑gl 或相关地图开发需求时自动触发。
- CI/CD 流水线里执行了
composer require脚本,但没提交日志,导致你本地拉代码后发现composer.json多了一行 - 团队成员用了
composer require --update-with-dependencies,顺手升级了其他包并写了新约束到composer.json - 某些 IDE(如 PHPStorm)启用了“自动同步依赖”插件,在你点击“Add dependency”时悄悄调用了
composer require - 误把
composer.json和composer.lock混淆:后者在composer update后必变,但前者纹丝不动
composer.json 改动后不生效?检查这三步
改完 composer.json 却发现类找不到、命令报错、依赖没装上,大概率卡在这几个环节:
- 没运行
composer install(锁文件存在时)或composer update(想升级)——文件改了,但vendor/没同步 - 改了
autoload配置但忘了composer dump-autoload -o,尤其新增 PSR-4 映射后 - 改了
scripts但没测试是否语法合法,比如漏了逗号、用了中文引号,导致composer run-script直接报错
验证方式很简单:composer validate 检 JSON 合法性,composer show vendor/name 看包是否真装上了,composer dump-autoload -o && php -r "new Vendor\Class();" 测试自动加载。
最容易被忽略的细节
不是所有字段改动都会立刻体现,尤其是这些:
-
"minimum-stability"和"prefer-stable"是全局策略开关,改完必须composer update才会影响后续安装行为,install不读这两个值 -
"config"下的process-timeout或fxp-asset配置,只在当前命令执行时起作用,改完不用重启终端,但得确保没被COMPOSER_HOME或项目级composer.json覆盖 - 用
composer config写的全局设置(如镜像源)会落到~/.config/composer/config.json,而不是项目内文件,很多人改错位置还不自知

















