手动改 composer.json 可行但须慎用:增删依赖、调版本、加 autoload 必须用 composer require/remove 等命令自动同步三处;仅换镜像源、调 stability、加 scripts、改 description 等元数据才需手改,且改后必须执行对应命令(如 dump-autoload、update、clear-cache)才能生效。

手动改 composer.json 是可行的,但绝大多数日常增删依赖、调版本、加 autoload 的场景,都不该手动改——composer require、composer remove、composer config 这些命令能自动同步三处(composer.json、composer.lock、vendor/),手改漏一步就导致环境不一致。
哪些操作必须用命令,不能手改
新增、删除、升级运行时依赖,一律走命令。手改 require 或 require-dev 后不运行对应命令,等于白改。
-
composer require monolog/monolog:^3.0:自动写入require、更新composer.lock、下载包到vendor/ -
composer remove phpunit/phpunit:安全删包,同时清理require-dev和composer.lock中的残留记录 -
composer require --dev friendsofphp/php-cs-fixer:精准进require-dev,避免误装到生产环境 - 加了
"autoload": {"psr-4": {"App\": "src/"}}?别只改 JSON,还得立刻跑composer dump-autoload
哪些情况只能手改 composer.json
命令行无法覆盖的配置项,才打开编辑器。这类修改往往影响全局行为或项目元信息,且不触发依赖安装逻辑。
DMap GL地图JSAPI(dmapgl)开发指南。用于编写、审查、调试 DMap 地图 API 代码,涵盖地图初始化、覆盖物渲染、图层管理、事件处理、控件交互等任务。当用户提及 dmap、dmapgl、jsapi‑gl 或相关地图开发需求时自动触发。
- 换镜像源:
"repositories": [{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"}]——composer config只能设repos.packagist,自定义仓库必须手写 - 调稳定性策略:
"minimum-stability": "dev"+"prefer-stable": true—— 命令行不支持一次设两个字段联动 - 加脚本钩子:
"scripts": {"post-autoload-dump": "php build/compile.php"}——composer config对数组追加支持弱,易覆盖已有项 - 改项目元数据:
"description"、"keywords"、"homepage"—— 这些字段纯展示用,composer config不支持(会报[InvalidArgumentException] Setting description does not exist)
手改后不生效?先查这三步
改完文件只是第一步,Composer 不会主动“发现”变更。常见失效不是语法错,而是没走对后续动作。
- 改了
require却没运行composer update或composer install→vendor/仍是旧状态,Class not found必然出现 - 改了
autoload却没跑composer dump-autoload→vendor/autoload.php不知道新路径,哪怕目录存在也加载失败 - 改了
config下的process-timeout或fxp-asset相关项,却没清缓存或重启终端 → PHP CLI 的 opcache 可能缓存旧配置,尤其在 Windows 或 WSL 下
格式和校验别跳过
手改最怕低级语法错误,比如全角引号、BOM 头、末尾多逗号。这些不会立刻报错,但会在 CI 或他人机器上突然崩掉。
- 用
composer format(≥2.5.0)预览并修复格式:composer format --dry-run看改动,composer format直接写入 - 别用
jq或python -m json.tool格式化 —— 它们会删注释、重排 key 顺序,而scripts执行顺序、require-dev与require的分界都依赖原始结构 - 改完立刻验证:
composer validate检语法,composer show看实际装了啥,php -r "new App\SomeClass();"实测 autoload 是否通
最容易被忽略的是:手改 autoload 后忘记 dump-autoload,或者改了 repositories 后没 composer clear-cache。这些步骤不耗时,但跳过就会让问题拖到部署阶段才暴露。

















