必须在主项目composer.json的repositories中配置{"type":"path","url":"../my-package"}并加"options":{"symlink":true},再执行composer update acme/utils;本地包需有合法composer.json且name与require一致,版本用dev-main,路径须为相对路径。

path仓库必须写在主项目composer.json的repositories里
Composer根本不会主动扫描你硬盘上的目录,它只认repositories数组里明确声明的源。把{"type":"path","url":"../my-package"}塞进主项目根目录下的composer.json里,才是唯一生效方式。写在本地包自己的composer.json中完全无效;用require字段直接填路径(比如"acme/utils": "../my-package")也会被忽略,报Could not find package。
- 路径必须是相对路径(如
"../my-package"或"./packages/utils"),绝对路径在Windows上极易静默失败 -
url指向的是目录,不是composer.json文件本身 - 整个
repositories必须是数组:即使只配一个,也要写成[{ "type": "path", "url": "../my-package" }] - 本地包目录下必须有合法
composer.json,且name字段(如"acme/utils")要和require里写的完全一致(大小写敏感)
本地改代码不生效?默认是复制,不是链接
执行composer install或composer update acme/utils后,vendor/acme/utils默认是拷贝出来的副本——你改../my-package/src/Helper.php,vendor里那版永远不变。要实时生效,必须启用符号链接。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 在
repositories条目里加"options": {"symlink": true}(Linux/macOS默认启用,但显式写上更稳妥) - Windows用户需开启“开发者模式”或以管理员权限运行命令行,否则
symlink创建会失败且无提示 - 改完本地包代码后,必须运行
composer update acme/utils(不是dump-autoload,也不是install),才会重建链接 - 验证是否成功:
ls -la vendor/acme/utils应显示-> ../my-package;Windows下用dir vendor\acme\utils看是否为“快捷方式”类型
require时版本号必须用dev-main这类分支名
path类型源下,Composer完全忽略本地包composer.json里的version字段,只按当前Git HEAD所在分支解析。写"1.0.0"或"*"都会导致找不到匹配版本。
- 本地包至少要有一次
git commit,且git branch能返回有效分支名(如main) - require字段必须写成
"acme/utils": "dev-main"(若默认分支是develop,就写dev-develop) - 不能写
dev-master除非本地分支真叫master——现在多数新库默认是main,拼错就报错 - 首次引入用
composer require acme/utils:dev-main,它会触发symlink创建
生产部署前必须移除path仓库配置
CI/CD或生产服务器上不存在../my-package这种路径,Composer会直接报错退出,且不会自动fallback到Packagist。这不是bug,是path类型的设计逻辑——它跳过所有远程元数据请求,只认你指的那条路。
- 不要把含
path仓库的composer.json直接提交到主干分支 - 推荐用环境变量或CI脚本动态注入:
composer config repositories.offline '{"type":"path","url":"./packages/my-utils"}',然后在构建阶段删掉 - 或者用
studio这类工具临时覆盖,避免污染版本控制 - 上线前务必确认
composer.lock里对应包的dist字段已回退为真实tarball地址,而非source类型
composer update acme/utils这一步——install不刷新链接,dump-autoload不碰文件结构,只有update指定包名才会重走path解析流程。










