path仓库默认仅支持source模式,不走dist,即使配置"preferred-install":"dist"也无效;启用dist需手动在本地包composer.json中补全绝对路径的dist字段。

path仓库默认不走dist,必须显式声明
Composer 的 path 类型仓库(比如 "type": "path" 指向本地目录)默认只支持 source 模式——它根本不会尝试下载 dist 包,因为本地路径没有 zip 或 tarball 可供拉取。哪怕你在项目里设了 "preferred-install": "dist",对 path 仓库也完全无效。
如果你期望 path 仓库也能像 packagist 包一样“可选 dist”,就得手动在该包的 composer.json 里补全 dist 字段:
{
"name": "myorg/utils",
"version": "1.0.0",
"dist": {
"url": "/absolute/path/to/myorg-utils-1.0.0.zip",
"type": "zip"
}
}
注意:url 必须是绝对路径(Windows 下如 C:/dev/utils.zip),且文件得真实存在;Composer 不会自动打包,你得自己生成 zip 并放好。
path仓库启用source时,git信息会被忽略
就算你把 path 仓库指向一个带 .git 目录的本地项目,Composer 也不会执行 git clone 或读取 commit hash——它只是硬链接或复制整个目录。这意味着:
-
composer show myorg/utils显示的source信息永远是{"type": "path", "url": "...", "reference": ""},reference字段为空 - 无法用
git checkout切换分支,因为 vendor 里是副本,不是克隆体 - 改了源码后运行
composer update myorg/utils,会重新复制一遍,覆盖你手动改的代码
真正想调试+提交,应该用 vcs 类型仓库配私有 Git 地址,而不是 path。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
混合使用path和vcs仓库时,preferred-install优先级失效
当你同时配置了 path 和 vcs 仓库,并在 config.preferred-install 里写了规则(比如 "myorg/*": "source"),这条规则对 path 仓库不起作用——它只影响从远程仓库安装的行为。
实际效果是:
-
myorg/utils来自path:总是复制,无视preferred-install -
myorg/api-client来自vcs(GitLab):遵守"myorg/*": "source",走git clone - 第三方包如
monolog/monolog:走"*": "dist",下 zip
别指望靠一个配置统一控制所有仓库类型;path 是特例,得单独接受它的行为边界。
CI 构建中误用path仓库导致缓存失效
在 CI(比如 GitHub Actions、GitLab CI)里,如果把开发机上的 path 仓库配置带进构建流程,会出现两种典型失败:
-
composer install报错Source directory ... does not exist:CI 环境没挂载对应路径,或路径写死成本地绝对路径 - vendor 缓存被污染:某次构建用了 path,下次换回 vcs,但 lock 文件里还记着 path 的 source 引用,导致
composer install失败或行为不一致
正确做法是:CI 配置中移除 path 仓库,改用 vcs + --prefer-dist;本地开发才开 path。可以在 composer.json 里用 platform-config 或脚本动态切换,但更稳妥的是——根本不在 composer.json 提交 path 配置,改用 COMPOSER_REPO_* 环境变量临时注入。

















