必须在 composer.json 中显式声明 type: "vcs"、URL 以 .git 结尾、配置 auth.json 使用 App Password,并在 repositories 中手动添加 packagist.org 源,私有库还需正确声明 name 和 version 字段。

直接在 composer.json 里写个 "url": "https://bitbucket.org/xxx/yyy" 是没用的,不配 type: "vcs"、不加 .git 后缀、不设 auth.json,Composer 就当它不存在,报 403 或 Repository not found 都算客气。
必须显式声明 type: "vcs" 且 URL 以 .git 结尾
Bitbucket 的 HTTPS 地址不是普通网页链接,Composer 只识别标准 Git URL 格式。漏掉 type 或写错类型(比如写成 "git" 或 "bitbucket"),整个仓库条目会被跳过。
-
type字段只能是小写的"vcs",不能省略 - URL 必须带
.git后缀,例如"https://bitbucket.org/yourname/mylib.git",写成/mylib会解析失败 - 多个私有仓库要按优先级顺序排列,但 vcs 类型只对明确
require的包生效,不会 fallback 查找
auth.json 必须用 http-basic 结构,App Password 替代账号密码
Bitbucket 已停用所有账号密码直连 API,必须用 App Password,并且必须通过 auth.json 传递——硬编码进 composer.json 会被忽略,也极不安全。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 项目根目录下新建
auth.json,内容格式严格为:{ "bitbucket.org": { "http-basic": { "bitbucket.org": { "username": "your-bitbucket-username", "password": "your-app-password" } } } } - App Password 需在 Bitbucket 账户设置页生成,权限至少勾选
account:read和repository:read -
auth.json必须加进.gitignore,CI 环境建议改用COMPOSER_AUTH环境变量
私有仓库的 composer.json 必须声明 name 和 version
Composer 不会自动从 Git 仓库推断包名,如果你的私有库 composer.json 没写 "name": "vendor/package",就算 URL 和认证全对,composer require vendor/package 也会报 Could not find package。
-
name必须符合vendor/name格式,且与require中的包名完全一致(区分大小写) -
version字段可写死(如"1.0.0"),也可用分支别名(如"dev-main as 1.0.x-dev") - 若用
dev-分支别名,require时需显式写"dev-main"或对应别名,不能只写"*"
多个 repositories 共存时,packagist.org 必须手动加回来
只要你在 composer.json 里写了 repositories 数组,Composer 就会关闭默认源。不显式加回官方源,连 monolog/monolog 这种基础包都装不上。
- 把
packagist.org当作一个普通composer类型仓库声明:{ "type": "composer", "url": "https://packagist.org" } - 建议把它放在
repositories数组末尾,避免干扰私有包匹配逻辑 - vcs 仓库和 composer 类型仓库可以混用,但 vcs 仅限已知包名,无法提供全局搜索能力
最常被忽略的一点:vcs 类型仓库不索引、不缓存、不预加载——每次 composer install 都会实时去 Bitbucket 解析目标仓库的 composer.json。如果那个仓库的 name 或分支别名变了,或者 auth.json 权限没覆盖到新仓库,错误往往出现在运行时而非配置阶段。

















