Composer install 默认不生成 symlink,因 config.symlinks 默认为 false;需在项目中执行 composer config symlinks true 启用,且仅对 type: "path" 仓库生效,Windows 需管理员权限或开发者模式,验证方式为 ls -la vendor/name 显示 -> 箭头。

Composer install 时为什么没生成 symlink
默认情况下,composer install 不会创建软连接(symlink),哪怕 composer.json 里写了 "type": "project" 或本地包用了 path 仓库 —— 根本原因是 config.symlinks 默认为 false。
这个配置控制所有本地 path 类型包是否以 symlink 方式安装,不是开关某个包,而是全局生效。
- 运行
composer config --global symlinks true可设全局默认(影响所有项目) - 更推荐在项目根目录执行
composer config symlinks true(只作用于当前composer.json所在项目) - 配置会写入
composer.json的"config"段,形如:"config": { "symlinks": true }
path 仓库类型必须配合 symlinks=true 才生效
如果你在 repositories 中定义了本地路径包,例如:
"repositories": [
{
"type": "path",
"url": "../my-package"
}
]
但没开 symlinks,Composer 会把 ../my-package 整个复制一份到 vendor/ 下,而不是建软链 —— 这会导致改源码不生效、磁盘占用翻倍、无法调试。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 只有
"type": "path"的仓库受symlinks控制;vcs或package类型无效 - 目标路径(
url)必须是绝对路径或相对于composer.json的相对路径,且存在composer.json - Windows 用户注意:需要启用开发者模式或管理员权限才能创建 symlink,否则会静默回退为 copy
如何验证 symlink 是否成功创建
装完后直接看 vendor/ 下对应包目录是不是链接:
- Linux/macOS:执行
ls -la vendor/myvendor/mypackage,输出含->即为软链,例如../my-package - Windows(PowerShell):用
Get-ChildItem vendor\myvendor\mypackage | ForEach-Object {$_.Attributes},返回含ReparsePoint表示成功 - 如果看到的是普通文件夹且大小明显偏大,大概率是 fallback 到 copy 了,检查
symlinks配置和系统权限
symlinks=true 的副作用和兼容性注意点
开启后不是万能的,有些场景会出问题:
- Docker 构建时:宿主机建的 symlink 在容器内可能失效,尤其用
bind mount时路径映射不一致 - 某些 IDE(如 PhpStorm)默认不跟随 symlink,需手动开启 “Follow symbolic links” 选项
- 部署到生产环境时,
composer install --no-dev仍会创建 symlink,但若目标路径不存在(比如 CI 环境没同步../my-package),会报错Could not create symlink - PHP 的
opcache.enable_cli=1可能缓存 symlink 目标文件的 realpath,改了源码却没热更,需opcache_reset()或关 CLI 缓存
真正要靠 symlink 调试本地包,得确保路径稳定、权限到位、环境一致——少一个环节,它就默默变 copy。

















