composer install 必须带 --no-dev、--optimize-autoloader、--classmap-authoritative 三个参数,否则线上易出现类加载失败、性能下降或 class not found 错误。

别直接在自由风格项目里写 composer install —— 大概率线上跑不起来,类加载失败、性能崩、甚至部署后 Class not found 报错。
为什么不能裸写 composer install
CI 环境和本地开发环境天然不同:没装 dev 包、没生成优化的 autoload、没锁定类映射路径。裸命令会把测试工具(phpunit)、静态分析器(infection)全打进 vendor,还沿用慢速的 PSR-4 文件扫描机制,导致线上启动慢、autoload 失效、Class not found 频发。
composer install 必须带的三个参数
这三个参数缺一不可,漏一个就可能让构建产物在线上挂掉:
-
--no-dev:跳过require-dev里的包,避免把phpunit、mockery打进生产环境 -
--optimize-autoloader:生成vendor/composer/autoload_classmap.php,类加载提速 50% 以上 -
--classmap-authoritative:强制 Composer 完全信任 classmap,不再 fallback 到文件系统查找——这是防止Class not found的最后一道防线
Jenkins Pipeline 中怎么写才安全
自由风格项目容易忽略 PHP 环境一致性,建议统一用 Pipeline,并显式指定 agent 和执行上下文:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
pipeline {
agent { label 'php-8.1' } // 必须提前在节点装好 PHP 8.1、Swoole 扩展、Composer
stages {
stage('Install dependencies') {
steps {
sh 'composer install --no-dev --optimize-autoloader --classmap-authoritative'
}
}
}
}
注意点:
- agent 标签要和 Jenkins 节点实际标签一致(比如
php-8.1),不能只写any - 别在
sh步骤里加sudo或切换用户,权限问题应在节点初始化时解决 - 如果项目用了自定义 autoload(如 psr-4 映射),确保
composer.json已提交且生效;必要时加composer dump-autoload在 install 后
和 SonarQube 或 PHPUnit 配合时的顺序陷阱
很多团队把 sonar-scanner 或 phpunit 放在 composer install 前面,结果扫描失败或测试报 Class 'SomeThirdPartyClass' not found:
-
sonar-scanner依赖vendor/autoload.php解析类引用,缺失则大量Unresolved reference警告,安全规则失效 -
phpunit运行前必须确保autoload.php可加载,否则连TestCase都找不到 - 实操顺序只能是:
composer install --no-dev --optimize-autoloader --classmap-authoritative→phpunit或sonar-scanner
最容易被忽略的是 --classmap-authoritative —— 它不报错,但一旦线上遇到冷启动或命名空间冲突,就会默默 fail fast,而且很难复现。别省这一个参数。










