ci/cd中composer不支持中文参数,所有命令必须使用半角ascii字符;所谓“中文配置”实为编辑器全角符号、bom、隐藏控制符或环境变量编码问题导致的构建失败。

CI/CD 中用 Composer,根本不存在“中文参数”这回事——所有参数必须是英文,且大小写敏感;所谓“中文配置”实际是误读或本地化工具干扰导致的构建失败。
composer install 命令里不能出现中文参数
Composer 命令行解析器不识别中文字符。如果你在 CI 脚本里写了 --no-dev 却被编辑器自动转成全角破折号(如“——no-dev”),或路径含中文、环境变量值含未转义中文,composer install 会直接报错退出,常见错误如:invalid argument '——no-dev' 或 Could not open input file: vendor/autoload.php(因路径解析失败)。
- 确保所有参数用半角 ASCII 破折号:
--no-dev,不是—no-dev或——no-dev - CI 脚本文件本身保存为 UTF-8 无 BOM 格式,避免隐藏控制字符
- 不要在
composer.json的scripts字段里写中文注释——虽然 JSON 允许,但某些旧版 Composer 解析器会卡住 - 私有仓库认证信息(如
COMPOSER_AUTH)若含中文密码,需 URL 编码后传入,否则composer install会静默失败
真正要配的是环境变量和平台约束,不是“中文参数”
所谓“中文配置需求”,往往对应三类真实场景:多语言项目需要适配不同地区时区/语言包、私有源地址含中文域名、或团队用中文文档描述参数含义。但这些都不该反映在 composer install 命令本身中:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 时区/语言行为由 PHP 运行时控制(如
date.timezone、intl.default_locale),跟 Composer 无关;CI 中应通过php -d date.timezone=Asia/Shanghai -r "..."显式设置 - 私有源域名含中文?必须先 Punycode 编码(如
xn--fsq512a.example.com),直接写中文域名会导致composer install解析失败并卡在 DNS 查询 - 团队内部用中文命名脚本(如
"脚本-部署": "composer install --no-dev -o --classmap-authoritative")可行,但执行时仍需调用英文名:composer run-script 脚本-部署—— 注意:这个中文 script 名不能含空格或特殊符号,否则composer run-script会报错
CI 脚本里最容易因“伪中文”出问题的几个点
不是参数写成中文才错,而是编辑器、终端、Git 配置混用导致不可见字符渗入命令行:
- 复制粘贴自微信/QQ/Notion 的命令,常带全角空格或零宽空格(U+200B),
composer install --no-dev看似正常,实则第二个空格是全角,触发Unknown option '--no-dev' - Git 提交时启用了
core.autocrlf且系统为 Windows,可能把换行符转成\r\n,某些 Alpine 基础镜像中的 shell 不兼容,导致composer install只执行前半截 -
COMPOSER_AUTH值里若含中文用户名(如 GitLab 私仓),必须 Base64 编码后填入,否则认证头构造失败,composer install卡在 “Downloading ...” 无报错 - GitHub Actions 中用
env:传参时,若值含中文未加引号,YAML 解析器会截断,导致composer install收到空的COMPOSER_AUTH,进而 fallback 到交互式登录而超时
真正关键的不是“怎么配中文”,而是确保所有输入都是干净、可验证的 ASCII 字符流——哪怕你的项目面向中文用户,CI 流水线也必须运行在无歧义的字节层面。任何试图让 Composer “理解中文参数”的尝试,最终都会变成排查隐藏字符的深夜调试。










