Composer install 不读取 repositories 配置,仅依赖 composer.lock;需删 lock 后 run update 或直接 require,且 path 仓库必须写在项目 composer.json 根级 repositories 中、url 为相对路径、目标含合法 composer.json 并已提交 Git。

本地包不生效?大概率是没让 Composer 真正“看见”你的 path 仓库——它只在 composer update 或 composer require 时解析 repositories,composer install 完全无视。
为什么 composer install 死活不走本地路径
这是最常踩的坑:composer install 只照 composer.lock 里已记录的源和版本安装,根本不会读取 repositories 配置。哪怕你刚在 composer.json 里加了 "type": "path",执行 install 也毫无反应。
- 必须删掉
composer.lock后运行composer update,或直接composer require vendor/name - 如果只想更新单个包,用
composer update vendor/name比全量更新更安全 - CI 环境下别写死
composer install—— 若有新 path 仓库,得先确保 lock 文件已按新配置生成
repositories 必须写在 composer.json 根级数组里
不能塞进 config、require 或任何子对象中;也不能靠 composer config --global 写进去——全局配置对项目级 path 仓库无效。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 正确写法(项目根目录
composer.json):[{"type": "path", "url": "./packages/my-utils"}] -
url必须是相对路径,开头带./或../;绝对路径、file://、~全部静默失败 - 支持通配符:
"url": "./packages/*",但不支持**;Windows 用户注意用/或\,单反斜杠会解析错误 - 目标目录下必须有合法
composer.json,且该文件里name字段(如"acme/utils")要和require中写的完全一致
本地包改了代码,vendor 里没变化?检查 symlink 和 autoload
type: path 默认创建符号链接,不是复制文件——这是为了实时调试,但也是问题高发区。
- 先确认是否真用了 symlink:
ls -l vendor/acme/utils,输出应含->;若显示普通目录,说明被覆盖或"symlink": false被设了 - 改了本地包的
autoload映射(比如 PSR-4 路径),必须在主项目中运行composer dump-autoload - 本地包的
composer.json必须有autoload块,否则类找不到;没打 git tag 就别写"1.2.0",改用"dev-main" - 本地包目录必须至少有一个 git commit,否则 Composer 拒绝加载(即使只是
git init && git add . && git commit -m "init")
为什么 vendor/bin/composer 不认项目级 repo.path
项目里用 vendor/bin/composer 执行命令,默认只加载全局配置(~/.composer/config.json),不会自动合并当前项目的 repositories 块——除非插件明确支持或你加了 --no-plugins。
- 真正生效的 path 仓库,必须写进项目级
composer.json的repositories数组,或通过composer config --local --add写入项目级配置文件(即不加-g) - 验证当前生效的仓库列表:运行
composer config repositories(不带-g) - 避免误写全局:
composer config -g repositories输出里不该出现你的本地路径
复杂点在于:Composer 对 path 仓库的识别是“一次性触发”的——它只在 update/require 时扫描并建立 symlink,之后所有操作都依赖这个链接状态;一旦 symlink 断了、autoload 没刷新、或 lock 文件残留旧记录,问题就会表现得像“配置没生效”,其实根源在链路的某个原子环节断了。

















