Private Packagist 必须同时完成全局凭证注册和项目源声明:需用 composer config -g http-basic.repo.packagist.com <token> "" 注册 token,并在 composer.json 中关闭默认源、显式声明私有源;否则必报 401 或 Package not found。

Private Packagist 不是改个 repositories 就能用的
它必须同时完成两件事:全局凭证注册 + 项目源声明,缺一不可。只在 composer.json 里加一条 "type": "composer", "url": "https://repo.packagist.com/your-org/",一定会报 401 Unauthorized 或 Could not fetch —— 因为 Composer 根本没把 token 发出去。
- token 必须通过
composer config -g http-basic.repo.packagist.com <your-token> ""注册(注意密码字段留空,Private Packagist 只认用户名位置传 token) - 项目
composer.json中需显式关闭默认源:"packagist": false,再声明私有源:"private-packagist": { "type": "composer", "url": "https://repo.packagist.com/your-org/" } - 别用
auth.json手动写 bearer token —— Private Packagist 不支持bearer字段,只接受http-basic格式,硬写会静默失效
包装不上?大概率是 Private Packagist 的“可见性”没开
和 packagist.org 不同,Private Packagist 默认不暴露任何包。即使你的 GitHub 私有库已连上、composer.json 也写了正确 name,只要没手动点进后台「Packages」列表里勾选启用,composer show 或 install 就永远提示 Package not found。
- 登录
packagist.com→ 进入组织 → 「Packages」页,搜索你的包名(严格区分大小写),确认状态是Enabled - 如果是 Git 仓库(如
git@github.com:myorg/utils),必须在后台点击「Sync now」并勾选Include in composer repository - 运行
composer clear-cache再试 —— 缓存可能残留旧的 404 响应,导致重试时直接跳过网络请求
CI 环境里 token 总是认证失败?路径和注入方式搞错了
CI 容器通常没设 $COMPOSER_HOME,Composer 会去读一个空的全局 auth.json,而不是你挂载进去的临时文件。结果就是反复提示 Authentication required 却登不上去。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 别依赖挂载
auth.json,改用环境变量COMPOSER_AUTH,值为 JSON 字符串:{"http-basic":{"repo.packagist.com":{"username":"<token>","password":""}}} - 确保 CI 脚本中
composer install前已正确 export 该变量,且未被后续命令覆盖 - 本地调试时可用
composer config --global --list | grep http-basic验证 token 是否真写进了全局配置
为什么不能只靠 Satis 或 GitHub Packages 替代?
Private Packagist 的核心价值不在“能托管”,而在“自动同步 + 权限隔离 + 审计日志”。Satis 是静态快照,GitHub Packages 没包级权限控制 —— 如果你需要让前端组只能拉 ui-kit,后端组才能装 payment-sdk,或者要查上周谁删了某个版本,这些都绕不开 Private Packagist 的后台管理界面。
- 它不替代 Git,而是监听 Git 事件:新 tag 推送 → 自动解析
composer.json→ 索引入库 → 触发 webhook - 所有包访问走统一域名(
repo.packagist.com),不用每个项目单独配不同源地址 - token 权限可细化到 read / read-write / organization admin,且支持轮换审计
真正容易被忽略的是:Private Packagist 的包名必须和 Git 仓库里的 composer.json 中 name 字段完全一致,包括 vendor 名大小写;输错一个字母,就等于在另一个宇宙里找包。

















