composer install 仅按 composer.lock 精确还原依赖,不装新包;若无 composer.json 或 composer.lock 会报错,有 json 无 lock 则自动触发 update;ci/cd 应用 --no-dev --prefer-dist --optimize-autoloader 确保可靠构建。

composer install 不是用来“装新包”的,它只负责按 composer.lock 精确还原已有依赖。想加包,请用 composer require。
为什么运行 composer install 没反应或报错?
最常见原因是当前目录下压根没有 composer.json 或 composer.lock:
- 检查是否在项目根目录:运行
ls -la | grep composer(Linux/macOS)或dir composer.*(Windows) - 如果两个文件都不存在,
composer install会直接报Could not locate a composer.json file,不是命令错了,是路径错了 - 如果只有
composer.json没有composer.lock,composer install会自动触发一次composer update行为——这意味着版本不锁定,不同机器装出的依赖可能不一致
composer install 和 composer update 到底该用哪个?
看你要的是“复现”还是“升级”:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 团队协作拉完新代码后,先
git status看composer.lock是否有变更:有更新就跑composer install,没更新但你又想试新功能?那才是composer update的场景 -
composer update monolog/monolog只更新指定包;漏写包名直接敲composer update,会重算整个依赖图——可能连带升级symfony/polyfill这类底层包,引发 DateTimeZone、mbstring 等隐性兼容问题 - CI/CD 部署脚本里必须用
composer install --no-dev,不是为了省时间,是为了跳过require-dev解析和下载,避免因 dev 包缺失或权限问题中断构建
部署时加了 --no-dev 还是装了 phpunit?
大概率是因为 composer.lock 里还存着 dev 包的记录——--no-dev 只跳过安装,不清理锁文件。
- 确认是否真没装:检查
vendor/下有没有phpunit/phpunit目录,或运行composer show --dev - 如果锁文件里有 dev 包但你不想要,得先本地运行
composer install --no-dev,再提交更新后的composer.lock - 更稳妥的做法是在 CI 中加一步
composer install --no-dev --prefer-dist --optimize-autoloader:--prefer-dist强制走压缩包而非 Git 克隆,--optimize-autoloader减少自动加载开销
真正容易被忽略的点是:composer install 的可靠性完全依赖 composer.lock 是否被正确提交和更新。很多人改了 composer.json 却忘了 git add composer.lock,结果别人 install 时还在用旧锁文件,版本对不上,问题很难复现。










