必须配置repositories字段,因Composer默认仅从packagist.org拉包;私有包需显式声明type(vcs/package/composer)及对应URL,否则require时直接报“Could not find package”。

私有包无法通过 packagist.org 安装,必须配置 repositories
Composer 默认只从 packagist.org 拉包,私有仓库(如 Git 仓库、Satis、Private Packagist)不在默认源里。不加 repositories 配置,composer require vendor/package 会直接报错:Could not find package vendor/package。
核心操作是在项目根目录的 composer.json 中添加 repositories 字段,指定私有包来源类型和地址:
-
type: "vcs":适用于 Git(GitHub/GitLab/自建 Git)、Mercurial、Subversion 仓库,Composer 会自动探测composer.json并支持分支/标签解析 -
type: "package":适用于单个静态包(无 Git 仓库),需手动声明name、version、dist或source,适合 ZIP 包或已发布的归档 -
type: "composer":对接私有 Composer 仓库服务(如 Satis、Private Packagist),需提供其packages.json的 HTTP 地址
vcs 类型下如何让 Composer 找到你的私有 Git 分支或 Tag
用 vcs 最常见也最灵活,但容易忽略两点:一是 Git 仓库根目录必须包含有效的 composer.json;二是 Composer 默认只识别符合语义化版本规则的 Tag(如 v1.2.0、1.2.0),不识别 feature/login 这类分支名——除非你显式指定 dev- 前缀。
示例:你的私有包托管在 GitLab,地址是 https://gitlab.example.com/myorg/my-package.git,主干是 main 分支:
{
"repositories": [
{
"type": "vcs",
"url": "https://gitlab.example.com/myorg/my-package.git"
}
],
"require": {
"myorg/my-package": "dev-main"
}
}
- 要安装
v2.1.0Tag,写"myorg/my-package": "2.1.0"或"^2.1" - 要安装
develop分支,必须写"dev-develop"(dev-不可省略) - 如果仓库用了子目录结构(如
/src/composer.json不在根目录),Composer 无法自动发现——此时只能换用package类型手动定义
用 package 类型引入 ZIP 或本地路径包时的关键限制
package 类型不走 Git 协议,而是直接下载或链接文件,适合 CI 构建产物、内部 SDK 发布包等场景。但它绕过了 Composer 的版本解析逻辑,所有版本号都得手写,且不支持 composer update 自动刷新。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
例如,你想从内网 HTTP 地址拉一个 ZIP 包:
{
"repositories": [
{
"type": "package",
"package": {
"name": "acme/utils",
"version": "1.0.5",
"dist": {
"url": "https://intranet.acme.com/releases/utils-1.0.5.zip",
"type": "zip"
},
"autoload": {
"psr-4": { "Acme\Utils\": "src/" }
}
}
}
],
"require": {
"acme/utils": "1.0.5"
}
}
-
version必须与require中的版本完全一致,不支持^1.0等范围写法 -
dist.url必须可被composer install直接访问(比如不能是登录后跳转的 URL) - 若想用本地路径(如
../my-private-lib),只能用path类型(非package),且该路径需存在composer.json
全局配置 vs 项目配置:别把私有源设到 COMPOSER_HOME
有人试图用 composer config -g repositories.xxx 把私有仓库加到全局配置,这会导致所有项目都尝试去拉这个源——不仅拖慢 composer update,还可能因权限或网络问题失败。私有源本质是项目依赖契约的一部分,必须锁定在项目级 composer.json 中。
唯一合理用全局配置的场景是认证信息,比如 Git 私库需要 token:
composer config -g github-oauth.github.com your_token_here
- GitLab 同理:用
gitlab-token - HTTP Basic Auth 可用
http-basic配置,避免把密码硬编码进项目composer.json - 一旦用了全局认证,项目
repositories仍需保留,只是不用再处理鉴权细节
路径本身不是靠“设置引入路径”来控制的,而是由 Composer 根据 repositories + require + 版本约束共同决定下载行为;真正影响最终安装位置的,是包自身的 autoload 和项目的 vendor-dir 配置——这两者才是你该检查的地方。

















