composer install 不是万能命令,它只严格按 composer.lock 还原 vendor 目录;若 composer.json 新增依赖但 lock 未更新,则 install 完全忽略该变更,导致漏包——必须先用 require 或 update 更新 lock,再 install 才生效。

直接说结论:composer install 不是“装依赖”的万能命令,它只做一件事:严格按 composer.lock 文件还原 vendor 目录。误当成 composer require 用,轻则漏包,重则线上崩。
为什么 composer install 有时不装新包?
因为它的行为完全受 composer.lock 控制——哪怕你刚在 composer.json 里加了一行 "monolog/monolog": "^3.0",只要 composer.lock 没更新,composer install 就当没看见。
- 常见错误现象:
composer install跑完,vendor/monolog/monolog依然不存在,但composer.json明明写了 - 真正该做的:先
composer update monolog/monolog或composer require monolog/monolog,让 lock 文件落地,再install - CI/CD 流程中必须用
install(而非require或update),否则无法保证环境一致性
--no-scripts 真的只是跳过脚本吗?
是,但影响比你想的深。Laravel 的 php artisan key:generate、Symfony 的 cache:warmup、甚至某些包的 post-install-cmd 都会被静默跳过。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 本地开发时关掉它,可能收不到配置文件生成提示(比如
config/excel.php没出来) -
composer install --no-scripts --no-dev --optimize-autoloader是 CI 环境黄金组合,但上线前务必确认:你是否真不需要这些脚本 - 某些包(如
laravel/sanctum)的迁移发布依赖post-autoload-dump,关掉--no-scripts后得手动跑php artisan vendor:publish
vendor 目录空着,但 install 不报错?
大概率是当前目录下根本没有 composer.lock 文件,而你又没加 --ignore-platform-reqs 或 PHP 版本不匹配。
- 现象:
composer install输出 “Installing dependencies from lock file”,然后秒退,vendor/仍是空的 - 检查点:运行
ls -la | grep composer.lock,没有就说明它根本没读到 lock 文件,此时实际走的是composer update逻辑(但因无 lock,会失败或跳过) - PHP 版本不兼容时,
install默认终止,加--ignore-platform-reqs可绕过,但后果自负(比如spatie/laravel-backupv8 要求 PHP 8.1+,硬装会 runtime fatal error) - 国内用户还要多查一层:
composer config --list | grep repo,镜像失效会导致下载中断且不报明确错误,vendor/就卡在半途
最常被忽略的一点:当你在项目里执行 composer install,它默认只认当前目录下的 composer.json 和 composer.lock;如果误进了子目录(比如 cd app/Http/Controllers 再 run install),命令会安静失败——既不报错,也不装任何东西。










