Composer path仓库默认不创建硬链接,只支持软链接或复制;强制软链接需确保config.symlinks为true、本地包composer.json合法、repositories中path配置正确,并执行composer update vendor/name验证。

path仓库默认不创建硬链接,只可能软链或复制
Composer 从不生成硬链接(hard link),所谓“硬链接方案”是常见误解。它对 path 类型仓库只有两种行为:软链接(symlink)或完整复制(copy)。是否 symlink 取决于系统能力、权限和配置,不是可选的“硬链接模式”。Windows 上若未启用开发者模式或未以管理员身份运行终端,composer install 会静默 fallback 到 copy;Linux/macOS 默认尝试 symlink,失败才 copy。
怎么让 path 仓库强制走 symlink 而非 copy
关键不是“开启硬链接”,而是排除 copy 的所有触发条件:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
-
config.symlinks必须为true(默认值,但可能被全局或项目级 config 覆盖,用composer config --list | grep symlinks检查) - 本地包目录下必须存在合法
composer.json,且含正确name字段(小写字母+短横线,如"acme/utils") - 主项目
composer.json的repositories中,url必须是相对于该文件的路径(推荐"../my-local-package",不用~或绝对路径) - 执行
composer update vendor/name(而非install),更可靠触发 symlink 逻辑;require后若没生效,先composer remove vendor/name再重试
为什么 symlink 在 vendor 里看不到箭头,却仍算成功
Windows 上 dir 显示 <SYMLINKD> 才算真 symlink;Linux/macOS 用 ls -l vendor/vendor/name 看是否带箭头指向源路径。但即使没显示,也可能已生效——因为 Composer 2.2+ 支持 junction(Windows)或 bind mount(Docker)等替代机制,只要 readlink vendor/vendor/name 有输出,就说明路径映射已建立。真正要验证的是:改本地 src/ 下的 PHP 文件,项目里 php index.php 是否立刻反映变更。
别碰 chmod +w vendor/ 或手动 ln -s
手动干预 vendor/ 目录会导致 Composer 锁文件(composer.lock)与实际状态错位,后续 composer update 可能覆盖或报冲突。也不要用 chmod +w 强行写入——这暴露权限问题,且掩盖了 symlink 失败的真实原因(比如 Windows 权限不足、Docker 挂载丢失 follow_symlinks)。唯一干净做法是:确保 path 配置对齐、版本约束匹配、系统支持 symlink,然后交由 Composer 自动处理。

















