Composer install 不会重新下载已安装包,因其默认复用 vendor 目录和 composer.lock 未变时的缓存;需用 remove + require 或清理 ~/.composer/cache/files/ 对应 zip 才能强制重拉。

为什么 composer install 不会重新下载已安装的包
Composer 默认复用 vendor/ 目录下已有的包,只要 composer.lock 文件没变、包版本范围匹配,就不会触发重新下载。即使你删了某个包的目录,composer install 也只补全缺失部分,不会“强制重拉”——它不认为这是必要动作。
composer remove + composer require 是最可靠的方式
想确保某个包从头下载(比如怀疑本地文件损坏、想验证 CDN 缓存是否生效、或需要干净解压),必须先彻底移除再重装。这不是绕路,而是 Composer 的设计逻辑:它把“安装”和“移除”视为原子操作。
- 运行
composer remove vendor/package-name(注意是vendor/package-name格式,不是package-name) - 再运行
composer require vendor/package-name:^x.y.z,显式指定版本可避免意外升级 - 如果该包是 require-dev 依赖,加
--dev参数:composer require --dev phpunit/phpunit:^10.5
别用 composer update 强制单个包——除非你真要升级
composer update vendor/package-name 确实会重新下载,但它同时会更新 composer.lock 中该包及其所有依赖的版本,可能连带升级其他包。如果你只是想“重拉不升级”,这反而引入不确定性。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 它会尊重
composer.json中的版本约束,但可能选到比当前 lock 文件里更新的小版本(如从^2.1.0升到2.1.3) - 如果该包有子依赖,那些子依赖也可能被一并更新,影响构建稳定性
- CI/CD 中误用会导致不可复现的构建差异
缓存干扰时,清理对应包的 zip 缓存更高效
Composer 下载前会查本地缓存(~/.composer/cache/files/),如果缓存里有旧 zip,它就直接解压,不会走网络。所以“重拉失败”常因缓存未更新。
- 查缓存路径:
composer config cache-dir - 进缓存目录,按包名搜索:
find $(composer config cache-dir) -name "*vendor-package-name*" - 删掉匹配的
.zip文件(不要删整个 cache,否则所有包都要重下) - 再执行
composer require,就会走网络重新下载
这个细节容易被忽略:你以为在重装,其实只是在解一个上周缓存的 zip。

















