composer install 默认安装 require 和 require-dev 全部依赖,生产环境应加 --no-dev 跳过 dev 依赖,并推荐配合 --optimize-autoloader 提升自动加载性能。

Composer install 默认会安装所有依赖,包括 dev 依赖
默认情况下 composer install 会读取 composer.lock 并安装全部依赖项(require 和 require-dev 都装)。这在生产环境是危险的——比如 phpunit、mockery、laravel/pint 这类开发工具可能引入额外扩展依赖或安全风险,还拖慢部署速度。
用 --no-dev 参数跳过 dev 依赖安装
最直接有效的方式就是加 --no-dev 标志:
composer install --no-dev
它会:
- 完全忽略 require-dev 区块
- 不解析、不下载、不安装任何 dev-only 的包
- 仍严格按 composer.lock 中的版本安装生产依赖(不会退回到 composer.json)
- 生成的 autoloader 里也不会包含 autoload-dev 规则
注意:这个参数只影响安装行为,不影响 lock 文件本身;后续在开发机上运行 composer install(不带 --no-dev)仍会装全量依赖。
CI/CD 或生产部署时建议配合 --optimize-autoloader
单独用 --no-dev 虽然够用,但生产环境还应加上:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
composer install --no-dev --optimize-autoloader
--optimize-autoloader 会:
- 把 PSR-4/PSR-0 类映射生成为静态数组(而非运行时遍历文件)
- 显著提升自动加载性能,尤其对大型项目
- 与 --no-dev 无冲突,且推荐一起使用
- 注意:该选项要求 autoloader 已被生成过一次(即至少执行过一次 composer dump-autoload 或 install),否则可能报错 Class not found
别误用 --ignore-platform-reqs 或 --prefer-dist
这两个参数和「只装生产依赖」无关,但常被混用,容易踩坑:
-
--ignore-platform-reqs是绕过 PHP 版本、扩展等平台约束,可能导致运行时报错,不是用来过滤依赖的 -
--prefer-dist只是优先下载压缩包而非源码,不影响装哪些包 - 如果误写成
composer install --no-dev --ignore-platform-reqs,虽然能跑通,但可能让生产环境加载到不兼容的扩展版本,得不偿失
真正要控制依赖范围,只有 --no-dev 是可靠且语义明确的开关。
复杂点在于:如果项目没提交 composer.lock,composer install --no-dev 会失败(因为没锁文件可依)。这时候必须先在开发环境运行 composer install 提交 lock,再推到生产——这点容易被跳过,导致部署卡住。










