composer symlink失效并非镜像源问题,而是创建条件未满足或配置错误:需启用开发者模式、清除vendor和lock文件、正确配置repositories中path仓库的"symlinks":true、避免挂载windows路径、检查prefer-dist是否覆盖source模式。

镜像源本身不干扰 symlink 行为——失效从来不是镜像的问题,而是 symlink 创建条件没满足,或系统/配置在悄悄 fallback 到复制模式。
Windows 下 symlink 失效:先确认开发者模式是否真生效
启用开发者模式只是打开权限开关,不是“一劳永逸”。Composer 会复用 vendor/ 和 composer.lock 中残留的状态,比如上次 install 因权限不足 fallback 成了复制目录,它就不会再尝试重建链接。
- 必须手动删掉整个
vendor/目录和composer.lock文件 - 关掉所有终端(VS Code 内置终端也要完全退出,不能只重启 shell)
- 用普通用户身份(不要管理员)运行
composer install --no-cache --prefer-source - 验证:进入
vendor/my-vendor/pkg,执行ls -la(WSL)或dir(PowerShell),看到<symlinkd></symlinkd>或箭头 → 才算成功
path 仓库的 symlinks 配置写错位置是高频错误
"symlinks": true 必须放在 repositories 数组里对应那个 path 仓库的对象内部,写在根 config 或全局配置里完全无效。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- ❌ 错误写法:
{"config": {"symlinks": true}}—— 这个字段 Composer 根本不读 - ✅ 正确写法:
{"repositories": [{"type": "path", "url": "../my-pkg", "symlinks": true}]} - 路径不能含
~或$HOME,必须是相对路径(如../my-pkg)或绝对路径(如C:/dev/my-pkg) - 目标目录必须存在,且其中
composer.json的name字段要和require中声明的完全一致(包括大小写)
Docker/WSL2 中 symlink 指向错乱:别挂载 Windows 主机路径
在 WSL2 或 Docker 容器里执行 composer install,如果 vendor/ 是从 Windows 主机挂载过来的(比如 /mnt/c/dev/project),NTFS 对 Linux 符号链接的解释不一致,会导致 bin 脚本指向错误、require 加载失败。
- 开发时把项目放在 WSL2 原生文件系统下(如
~/project),而非/mnt/下 - 容器内不要用
-v /host/path:/container/path挂载含vendor/的目录 - 若必须跨系统协作,改用
"preferred-install": {"my-vendor/pkg": "source"}+path仓库,走 git clone,放弃 symlink
Linux/macOS 上 symlink 不生成:检查是否被 prefer-dist 全局覆盖
即使系统支持 symlink,如果全局或项目级配置了 prefer-dist,Composer 就会跳过 source 模式,自然也不会创建链接。
- 运行
composer config -g prefer-dist查看是否输出true - 临时绕过:
composer install --prefer-source - 永久修正:运行
composer config -g prefer-dist false,或在项目composer.json的config中设"preferred-install": {"*": "source"} - 注意:
"preferred-install": "source"写在根config里只影响新安装,已安装包需先删vendor/再重装
真正卡住人的地方,往往不是“怎么配”,而是“配了但没清缓存”“写了但放错层级”“路径对了但挂载点不对”。symlink 是默认行为,不是可选优化——一旦它失效,说明某个环节在静默降级,得顺着 vendor/、composer.lock、repositories 结构、系统权限四点一起查,缺一不可。










