composer install 不会自动链接本地共享库,因为它仅依据 composer.lock 还原依赖快照,跳过 repositories 解析与 symlink 创建;必须先执行 composer update 或 composer require 才能建立符号链接。

composer install 为什么不会自动链接本地共享库
它只读 composer.lock,不解析 repositories 配置,也不重建 symlink。哪怕你在 composer.json 里加了 "type": "path" 或配好了 "options": {"symlink": true},执行 composer install 也完全没反应。
这是设计使然:install 是“还原快照”,不是“重装构建”。它跳过所有仓库发现、版本决策、源码拉取逻辑,直接按 lock 文件里的 commit hash / dist URL 下载归档包。
- 想让本地库生效,必须先触发一次
composer update(或composer require)——只有这时才会读repositories并建立 symlink -
composer install后看到的vendor/my/local-package是 zip 包解压出来的副本,不是符号链接 - CI/CD 环境里更不能依赖 symlink,因为
--no-dev+--optimize-autoloader会进一步关闭路径映射能力
如何配置 path 类型本地库并让它在开发中真正生效
关键不在 composer install,而在你什么时候、用什么命令引入它。path 源只对 composer update 和首次 composer require 有效。
典型配置示例(composer.json):
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
{
"repositories": [
{
"type": "path",
"url": "../my-shared-lib"
}
],
"require": {
"my/shared-lib": "*"
}
}
- 确保
../my-shared-lib是完整包目录,含composer.json且有"name"字段(如"my/shared-lib"),否则匹配失败 - 运行
composer update my/shared-lib—— 这会创建 symlink 到vendor/my/shared-lib - 之后再跑
composer install,只要 lock 文件里记录的是该包的"type": "path"条目,就会保留 symlink;否则仍会回退为 dist 安装 - 注意:Git 提交时不要把 symlink 当普通文件处理,Linux/macOS 下没问题,Windows 需启用开发者模式或用 Git 2.30+ 的
core.symlinks=true
composer install 报错 “Your requirements could not be resolved” 的真实原因
这不是依赖冲突,是环境不匹配 lock 文件的硬性前提。常见三类问题:
- PHP 版本低于
composer.lock中某包声明的php最低要求(比如锁了monolog/monolog v3.5.0,它要求PHP >=8.1,而你本地是 8.0) - 缺失扩展:
ext-mbstring、ext-xml、ext-curl等未启用,composer diagnose会直接标出 -
composer.json顶部"config": {"platform": {"php": "8.2.10"}}写死了平台版本,但实际 PHP 是 8.1 —— 此时composer install会拒绝执行,哪怕所有包都兼容
--ignore-platform-reqs 只是绕过检查,装出来的包极大概率在运行时报 Class not found 或 Call to undefined function,别当解决方案用。
CI/CD 和新同事首次拉代码时,composer install 的安全写法
只允许这一条命令:
composer install --no-dev --optimize-autoloader
-
--no-dev:跳过require-dev里的包(如 PHPUnit),避免污染生产镜像 -
--optimize-autoloader:生成vendor/composer/autoload_classmap.php,提升类加载速度,尤其配合 APCu 时效果明显 - 绝对不要加
--ignore-platform-reqs或--force—— 它们掩盖的是 PHP 版本、扩展、platform 配置等真实缺陷 - 如果
composer.lock不存在,composer install会 fallback 成update,结果不可控;务必确认它已提交进 Git
真正容易被忽略的点:即使 composer install 成功,vendor/autoload.php 也可能因 PSR-4 映射路径错误或 composer dump-autoload 没执行而失效 —— 不要急着重装,先 php -d display_errors=1 -d error_reporting=-1 vendor/autoload.php 直接测加载器本身。










