Composer 需通过 repositories 配置 path 类型仓库指向本地包路径,url 须为项目内相对路径,包内 composer.json 必须含 name 和 version(如 "dev-main"),require 时用 "dev-main" 等分支别名并设 "minimum-stability": "dev"。

本地包怎么让 Composer 找到它
Composer 默认只从 packagist.org 或配置的私有仓库拉包,本地代码不在搜索范围内。必须显式告诉它“这个路径下有个包”,靠 repositories 配置实现。不加这节,composer require 永远报 Could not find package xxx。
在项目根目录的 composer.json 里加一段:
{
"repositories": [
{
"type": "path",
"url": "./packages/my-local-package"
}
]
}
注意三点:
-
url是相对于composer.json的路径,不能用绝对路径或../跨出项目根(Composer 会拒绝) -
my-local-package目录下必须有合法的composer.json,至少含name和version(如"version": "dev-main") - 改完后要删掉
vendor/和composer.lock,再composer install,否则缓存可能跳过新仓库
require 时该写什么版本号
本地 path 类型仓库不走语义化版本解析,而是直接映射到目录内容。所以不能写 ^1.0 这类约束,得用 dev- 开头的开发分支别名,比如 "my-vendor/my-package": "dev-main"。
常见错误现象:
- 写
"dev-master"但包里没有master分支 → 报Could not find a matching version - 写
"1.0.x-dev"但composer.json里version是"dev-main"→ 不匹配,Composer 不认 - 没加
"minimum-stability": "dev"→ 默认只接受 stable 版本,dev-main被过滤掉
稳妥做法:在项目 composer.json 顶层加 "minimum-stability": "dev" 和 "prefer-stable": true(兼顾稳定性和开发版可用性)。
改了本地包代码为什么 vendor 里没更新
因为 Composer 对 path 类型仓库做了硬链接(Linux/macOS)或复制(Windows),不是实时同步。改了 ./packages/my-local-package 的代码,vendor/my-vendor/my-package 不会自动变。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
必须手动触发重映射:
- 运行
composer update my-vendor/my-package(推荐,只更新指定包) - 或
composer dump-autoload(仅刷新自动加载,不更新文件) - 切记不要删
vendor/后install——这会把本地包完整复制进 vendor,失去“改源码即生效”的调试意义
验证是否生效:进 vendor/my-vendor/my-package 看文件修改时间,或 ls -l 看是不是软链接(Unix 系统下)。
调试时怎么快速定位是本地包还是 vendor 包在执行
容易混淆的点:你以为在跑本地代码,其实 Composer 加载的是 vendor 里旧的副本。最直接的办法是加一句临时日志:
// 在本地包某个关键函数开头加 echo "Running from: " . __DIR__ . "\n";
如果输出路径含 vendor/,说明没走 path 仓库;如果含 packages/my-local-package,才对。
另一个信号:改了本地包的 composer.json(比如加个 description),然后运行 composer show my-vendor/my-package —— 输出里 source 字段如果是 path 类型,且路径正确,基本就没问题了。
真正麻烦的是 Windows 下的 hard link 行为和 IDE 缓存,有时候改了文件,PHP 进程还在读旧 inode,建议调试期间关掉 opcache,或加 opcache_reset() 临时调用。

















