composer.json中repositories怎么写_composer配置仓库地址

1次阅读

repositories 字段必须是数组而非对象,如[“{“type”:”composer”,”url”:”https://packagist.org/”}”];声明后官方源不再自动继承,需显式添加;私有 git 仓库设 type=”git”,自建 composer 仓库用 type=”composer”;禁用 packagist.org 后须手动添加镜像,且顺序影响查找优先级。

composer.json中repositories怎么写_composer配置仓库地址

repositories 字段必须是数组,不是对象

很多人直接写成 {"repositories": {"packagist.org": {"type": "composer", "url": "https://packagist.org/"}}},结果 Composer 报错:Invalid repository type, expected Array。因为 repositories 的值必须是数组,哪怕只配一个仓库也要用方括号包起来。

  • ✅ 正确写法:"repositories": [{"type": "composer", "url": "https://packagist.org/"}]
  • ❌ 错误写法:"repositories": {"packagist.org": {...}}"repositories": {...}
  • 默认行为:不写 repositories 时,Composer 自动包含官方 Packagist(packagist.org);一旦声明该字段,官方源就**不会自动继承**,必须显式加回去

私有 Git 仓库要设 type=git,且 url 必须可被 git clone

想从 github 私有库或公司内网 gitlab 拉包?不能只填 HTTPS 地址就完事。Composer 会尝试执行 git clone,所以 url 要匹配你本地 git 的访问能力。

  • 如果你用 ssh 克隆私有库(如 git@github.com:user/repo.git),url 就得写这个格式,且确保 ssh-agent 已登录、key 已加载
  • 如果用 HTTPS + Token(比如 https://<token>@github.com/user/repo.git</token>),token 必须有 read:packages 权限(GitHub)或对应仓库的读权限(GitLab)
  • type 必须是 "git",不是 "vcs"(虽然它也能识别,但 "git" 更明确、兼容性更好)
  • 示例:{"type": "git", "url": "https://gitlab.example.com/mygroup/mypackage.git"}

自建 Composer 仓库要用 type=composer,别漏掉 packages.json

搭了 Satis 或 private Packagist?这类服务对外暴露的是一个含 packages.json 的静态目录,不是 Git 仓库。此时 type 必须为 "composer",否则 Composer 会当成 VCS 处理,报 Could not fetch packages.json

  • 确认你的仓库根路径能直接访问到 https://your-repo.com/packages.json
  • url 填域名+路径即可,不用带 /packages.json —— Composer 会自动拼
  • 示例:{"type": "composer", "url": "https://repo.mycompany.com/"}
  • 注意:Satis 生成的 packages.json 默认不包含 dev 分支,若需安装 dev-main,得在 satis.json 里配 "require-all": true 或显式列 "require-dependencies": true

packagist.org 被禁用后必须手动加回,且位置影响优先级

有些团队为了安全或镜像策略,在 repositories 里写了 {"packagist": false}。这会彻底关掉官方源 —— 但很多人忘了补回国内镜像(如阿里云、腾讯云),导致所有非私有包都装不上。

  • {"packagist": false} 是合法写法,作用是屏蔽默认源;但它本身不提供任何包,只是“关开关”
  • 想用阿里云镜像?得额外加一条:{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"}
  • 顺序很重要:Composer 按数组顺序查找包,前面的仓库匹配到了就不会往后找。把私有源放前面,公共镜像放后面
  • 别依赖 composer config repo.packagist 命令临时设置 —— 它只改全局或当前项目的 config,不改 repositories,对私有包发现逻辑无效

配置生效后,运行 composer show -p 可验证仓库是否被识别;遇到包找不到,先跑 composer clear-cache 再试 —— 缓存里可能存着旧的 packages.json 索引。私有仓库的认证、HTTPS 证书、DNS 解析这些底层链路,比 composer.json 语法更容易卡住。

text=ZqhQzanResources