答案:通过composer update更新所有依赖,开发环境可灵活升级,生产环境用composer install --no-dev确保稳定。

当你问到“composer如何只更新开发环境的依赖”时,这背后其实藏着一个很有意思的思考:我们既想保持生产环境的稳定,又想在开发时拥有最新的工具和库。Composer本身并没有一个“只更新require-dev”的魔法开关,因为依赖关系盘根错节,开发依赖往往也依赖于核心的生产依赖。但别担心,我们完全有办法在开发流程中,以一种清晰且可控的方式,确保你的开发工具和库始终保持最新状态,同时避免不必要的生产环境风险。
在开发环境中,最直接、也是最常用的策略就是直接运行
composer update
composer.json
require
require-dev
如果你有更细致的需求,比如只想更新某个特定的开发依赖包,你可以这样操作:
composer update vendor/package
例如,如果你只想更新
phpunit/phpunit
composer update phpunit/phpunit
--dev
composer.json
这确实是一个值得深思的问题。想象一下,如果Composer有一个
--only-dev
require-dev
require
require-dev
require
require
Composer 的核心是一个依赖解析器。它需要一个完整的依赖图来确保所有约束都能被满足。如果你只更新图的一部分,很可能会导致开发依赖无法满足其对生产依赖的版本要求,从而产生冲突或一个不完整的
composer.lock
phpunit
symfony/yaml
symfony/yaml
require
phpunit
symfony/yaml
phpunit
所以,Composer 采取的策略是,当你运行
composer update
composer update --dev
composer install --no-dev
在持续集成/持续部署(CI/CD)流程中,我们对依赖的管理会更加严格和明确,这是区分生产与开发依赖更新的关键环节。
生产环境部署(或构建生产镜像): 在生产环境中,我们的目标是稳定、最小化包体积和最快的加载速度。因此,我们绝不应该运行
composer update
composer install --no-dev --optimize-autoloader --no-interaction --prefer-dist
composer install
composer.lock
--no-dev
require-dev
--optimize-autoloader
--no-interaction
--prefer-dist
开发环境/CI测试环境: 在开发环境或CI的测试阶段,我们通常需要所有依赖,包括开发工具。
composer.lock
composer install
composer.lock
composer.lock
composer.json
composer update
composer update
composer.lock
核心思想是,
composer.lock
composer update
虽然保持开发依赖的最新状态有很多好处,比如能及时获得新功能、性能优化和安全补丁,但过于频繁或不加思考的更新也可能带来一些挑战。
挑战:
composer update
应对策略:
composer.json
*
^
~
"phpunit/phpunit": "^9.5"
composer outdated --dev
composer outdated --dev
composer why-not vendor/package version
通过这些策略,你就能在享受最新开发工具带来的便利与效率的同时,有效规避潜在的风险,让你的开发工作流更加顺畅和可控。
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号