composer install --no-dev不能直接使用,因其仅跳过require-dev包安装,不清理旧vendor/、不校验composer.lock一致性、不检查PHP环境;必须先rm -rf vendor/、确认lock文件已提交且匹配、验证PHP版本与扩展,再执行composer install --no-dev --optimize-autoloader --classmap-authoritative --no-interaction。

生产环境依赖同步不是“装得快”,而是“装得准且不带多余东西”——必须用 composer install --no-dev,但单靠这条命令远远不够,漏掉任一环节都可能线上报错。
为什么 composer install --no-dev 不能直接拿来就用
它只跳过 require-dev 包,不清理旧 vendor/、不校验 composer.lock 是否匹配当前代码、也不检查 PHP 环境是否达标。常见后果是:
-
Class not found:旧vendor/里残留了被删掉的类,autoload 混乱 -
Your lock file does not contain the required package:composer.json已改但没提交新composer.lock - 运行时扩展缺失:比如
ext-gd没启用,但composer.lock记录的包要求它
部署前必须做的三件事(顺序不能错)
缺一不可,否则 composer install --no-dev 就是掩耳盗铃:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 删干净
vendor/:rm -rf vendor/—— 别信composer dump-autoload或手动删子目录,残留文件会干扰 autoload - 确认
composer.lock已提交且未被修改:运行git status看它是否在暂存区;再对比开发机和生产机的sha256sum composer.lock - 检查 PHP 版本和扩展:运行
php -v和php -m | grep -E 'gd|mbstring|xml',确保满足composer.lock顶部platform字段声明
composer install 的正确参数组合
光加 --no-dev 是裸奔,必须搭配以下参数才能真正落地:
-
--optimize-autoloader:生成扁平类映射,避免每次请求都遍历目录找 class -
--classmap-authoritative:告诉 autoloader “只信 classmap,别去 PSR-4 目录猜”,性能更稳 -
--no-interaction(可简写为-n):防止 CI/Docker 构建卡在交互提示上超时 - 不加
--ignore-platform-reqs:它是临时止痛药,掩盖环境不一致问题,不该出现在生产脚本里
完整命令:composer install --no-dev --optimize-autoloader --classmap-authoritative --no-interaction
容易被忽略的细节:lock 文件里的 dev 包记录
composer.lock 里哪怕只存了一条 phpunit/phpunit 的版本记录,--no-dev 也会让它参与依赖解析——只是最后不下载。如果解析失败,整个安装就中断。所以:
- 本地开发改完
composer.json后,必须跑一次composer update --lock再提交composer.lock - CI 流水线第一行建议加
composer validate --strict,它能提前发现lock和json不匹配 - 别指望删掉
require-dev段就能让lock干净——必须重新生成composer.lock才行

















