生产环境必须用 composer install --no-dev --optimize-autoloader --no-interaction --prefer-dist,缺一不可:--no-dev跳过dev包防安全风险,--optimize-autoloader生成类映射降加载延迟至0.05ms,--no-interaction避免ci卡死,--prefer-dist确保稳定快速安装。

生产环境必须用 composer install --no-dev --optimize-autoloader --no-interaction,其他组合都是高危操作。它不是“推荐做法”,而是防止线上崩溃的硬性防线。
为什么生产环境死守 composer install 而不是 composer update
composer install 只读 composer.lock,不解析 composer.json,不联网求解依赖,不修改 lock 文件;composer update 则完全忽略 lock,强制重跑 SAT 求解器,重新下载所有包并覆盖 lock——哪怕你只改了一行 composer.json,它也会把 symfony/polyfill、psr/cache 全部重算一遍。
常见错误现象:
- CI 脚本里写
make deploy,背后调了composer update --no-dev→ 部署失败或功能异常 - 手动登录服务器执行
composer update修复“小问题” → 引入未验证的monolog/monolog v3.6.0,日志上下文序列化方式变更,凌晨告警爆发 -
composer.lock没提交进 Git →composer install自动退化为update行为,不同机器装出不同 vendor
--no-dev 不是开关,是约束条件
--no-dev 是否生效,取决于 composer.lock 文件本身是否包含 require-dev 包。如果 lock 文件里已记录 phpunit/phpunit,那执行 composer install --no-dev 会直接报错 dev dependencies not found,而不是“跳过安装”。
实操要点:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 首次上线前,必须在干净环境(无
vendor/、无composer.lock)运行:composer update --no-dev --lock,再提交 lock 文件 - CI 脚本中应前置清理:
git clean -xffd vendor/ && rm -f composer.lock,再拉取最新合规 lock - 部署后验证:
composer show --dev应提示No dependencies installed for development -
--production是--no-dev的别名,但--prod不存在,输进去会报错Unrecognized option: --prod
--optimize-autoloader 不是可选优化,是性能底线
不加 --optimize-autoloader(或简写 -o),autoloader 运行时靠遍历目录匹配类名,单次加载约 1.2ms;加上后生成 vendor/composer/autoload_classmap.php,直连类名与文件路径,降到 0.05ms 左右。
注意它和 --classmap-authoritative 的关系:
-
--optimize-autoloader是基础项,必须加 -
--classmap-authoritative是增强项,告诉 autoloader “类只可能在 classmap 里,别再去 PSR-4 目录找”,能进一步提速,但要求所有类都已映射(比如不能有动态require的测试类) -
--optimize已废弃,别用
部署脚本漏掉 --no-interaction 就可能卡死
--no-interaction(或简写 -n)防止 Composer 在构建过程中弹出交互提示。典型场景包括:
- Docker 构建时遇到
Do you trust this repository?,超时失败 - 私有包源未配置信任策略,install 卡在确认环节
- CI 流水线因等待输入而挂起,最终被平台 kill
所以完整安全的生产命令是:composer install --no-dev --optimize-autoloader --no-interaction --prefer-dist。少一个参数,就可能让一次部署停在某个没人看守的终端前。










