应共享源码与composer.lock文件,各系统独立运行composer install;Windows需启用symlinks或用Docker/WSL;vendor目录不提交,避免手动符号链接。

直接在 Windows 和 Linux 之间共享含符号链接的 Composer 项目,容易出问题——因为 Windows 默认不支持类 Unix 的符号链接(尤其在非管理员权限下),而 Composer 在不同系统上生成的 vendor 符号链接行为不一致。核心思路是:**不跨系统共享符号链接本身,而是共享源码与锁文件,让各系统独立生成兼容自身的 vendor 目录**。
用 composer install 替代 composer update 并提交 composer.lock
确保所有协作者都提交并更新 composer.lock 文件。这是关键前提——它锁定依赖版本和安装方式。Linux 和 Windows 都应运行 composer install(而非 update),这样 Composer 会按 lock 文件精确还原,且自动适配当前系统生成合适的 autoloader 和链接策略。
- Linux 下默认用符号链接(
ln -s)链接vendor/bin工具 - Windows(PHP ≥ 7.4 + 管理员权限或启用了开发者模式)可能创建符号链接;否则 Composer 自动回退为复制或使用批处理脚本(如
phpunit.bat) - 只要 lock 文件一致,功能行为就一致,无需关心底层链接形式
避免手动创建跨平台符号链接
不要在项目中手动添加指向 vendor/ 或其他路径的符号链接(例如 ln -s vendor/autoload.php autoload.php)。这类链接在 Windows 上大概率失效或需额外权限。Composer 原生机制已足够可靠:
- Autoload 由
vendor/autoload.php统一处理,无需外部链接 - 二进制工具(如
phpunit)通过vendor/bin/访问——Composer 会为 Windows 自动生成 .bat 文件,Linux 生成可执行脚本 - 若必须暴露命令,统一用
php vendor/bin/phpunit调用,完全跨平台
Git 配置注意:不跟踪 vendor/,但留意 Windows 的 symlink 属性
vendor/ 必须加入 .gitignore,永不提交。但要注意 Git 在 Windows 上对符号链接的处理:
- Linux 用户:Git 默认能正确检出 symlink(作为链接存储)
- Windows 用户:Git 默认将 symlink 存为普通文本文件(含路径内容),导致
vendor/bin工具不可执行 - 解决方法:Windows 用户运行
git config --global core.symlinks true,并以管理员身份运行 Git Bash 或启用 Windows 开发者模式(Win10/11) - 更稳妥做法:所有人统一用
composer install重建vendor,不依赖 Git 检出的链接
开发环境建议:用 Docker 或 WSL 保持一致性
如果团队混合使用 Windows 和 Linux,最省心的方式是统一运行环境:
- 用 Docker:定义标准 PHP+Composer 镜像,所有人在容器内运行
composer install和应用,vendor在容器内生成,宿主机只映射源码 - Windows 用户用 WSL2:在 Linux 子系统中开发,完全规避 Windows 权限和链接限制,Git 和 Composer 行为与原生 Linux 一致
- 避免“同一份 vendor 目录被两个系统交替写入”——这极易损坏 autoload 映射或引发权限冲突
基本上就这些。不复杂但容易忽略:关键是信任 Composer 的 lock 机制和平台自适应能力,而不是试图让符号链接本身跨系统工作。










