composer 本地包热开发需配置 path 类型仓库并启用 symlink:repositories 中 url 用相对路径,本地包 composer.json 的 name 必须与主项目 require 一致,且需设 "options": {"symlink": true},composer ≥2.2 才支持。

Composer 本身没有 composer link 命令,所谓“链接”实际是通过 path 类型仓库 + 符号链接(symlink)机制实现的本地包热开发,不是安装后手动软链,也不是全局命令。配错路径、漏掉 symlink 选项或版本不匹配,都会导致 vendor 里出现复制副本而非实时链接。
如何配置 path 仓库让 Composer 识别本地包
关键不在 require,而在 repositories 字段。Composer 只有先知道“这个本地目录是个包源”,才会按规则解析它。
-
url必须是相对路径(如../my-package),不能用~/或绝对路径;Windows 下也必须用正斜杠或双反斜杠,单反斜杠会解析失败 - 本地包根目录下必须存在合法
composer.json,且其中name字段要和主项目require中声明的完全一致(包括大小写) - 如果本地包
composer.json里没设"minimum-stability": "dev",主项目就得在自己的composer.json顶层加"minimum-stability": "dev",否则dev-main这类版本会被忽略
为什么 vendor 里是复制而不是符号链接
默认行为就是复制——这是 Composer 为保证构建可重现性做的保守设计。想改用 symlink,必须显式启用,且只对 path 类型仓库生效。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 推荐方式:在本地包自己的
composer.json里加"options": {"symlink": true}(注意:不是主项目的配置) - 替代方式:全局开启(影响所有项目)
composer config --global path.repo.symlink true - ⚠️
composer install不触发 symlink,必须用composer update vendor/name或composer update全量更新才生效 - 验证是否成功:运行
ls -la vendor/vendor/name,输出中应含->指向你本地源码路径
常见报错和对应检查点
报错往往不是语法问题,而是路径、权限或版本策略卡住。
-
Package not found:检查repositories.url路径是否存在、拼写是否正确(..层数够不够)、本地包composer.json的name是否和require完全一致 -
Could not scan for classes:本地包composer.json缺少autoload配置,哪怕只是空对象{"autoload": {}}也要有 - Windows 下提示 “operation not permitted”:终端未以管理员身份运行,或系统未启用开发者模式(Win10/11 需打开“开发者选项”)
- 修改本地代码后不生效:确认
vendor/name确实是 symlink(用ls -la看),且 PHP opcode 缓存(如 OPcache)没缓存旧的自动加载映射——可临时关掉 OPcache 或执行composer dump-autoload
真正容易被忽略的是:symlink 生效的前提是 Composer 版本 ≥ 2.2,且本地包的 composer.json 必须包含 options 块——这个配置不会被主项目继承,也不能写在主项目的 repositories 里。路径、name、symlink 三者缺一不可,少一个就退回复制模式。










