Composer 不处理行结尾转换,行尾由 Git 配置(如 core.autocrlf)或 .gitattributes 决定;vendor/ 和 composer.lock 的换行符需通过 .gitattributes 统一规范为 lf,避免跨平台问题。
Composer 本身不处理跨平台行结尾(CRLF vs LF)的自动转换,它既不会在安装包时重写文件换行符,也不会在生成 vendor/autoload.php 或其他产出文件时做规范化。行结尾由源码仓库(如 Git)或原始包发布者决定,Composer 只负责原样提取和复制。
Git 的 core.autocrlf 才是关键控制点
绝大多数 Composer 包通过 Git 获取(哪怕是 packagist.org 上的),而行结尾实际由 Git 的换行符策略控制:
- Windows 用户若未配置,Git 默认启用
core.autocrlf=true:检出时转 CRLF,提交时转 LF - Linux/macOS 默认
core.autocrlf=input:提交时转 LF,检出时不转换 - 若项目根目录存在
.gitattributes,它的规则(如* text=auto eol=lf)会覆盖全局设置 - Composer 安装的
vendor/内容受当前 Git 配置影响——比如你在 Windows 上composer install,且core.autocrlf=true,那 vendor 里 PHP 文件很可能含 CRLF
composer.json 中没有行尾相关配置项
不存在类似 "line_ending": "lf" 或 "normalize_eol" 这类字段。以下常见误操作需避免: