私有包需显式声明仓库地址、正确打git标签、严格匹配psr-4自动加载路径;三者任一出错均导致安装失败。

私有包不是“写完就能用”,必须显式声明仓库地址
Composer 不会自动扫描你本地或内网的 Git 仓库,哪怕它和 Packagist 上的包结构一模一样。项目要装你的私有包,composer.json 里必须在 repositories 字段明确告诉 Composer:“去哪找”。
- 错:只改了私有包自己的
composer.json,没动使用方项目的repositories - 对:在项目根目录的
composer.json中加一段:"repositories": [ { "type": "vcs", "url": "https://gitlab.internal/myorg/my-logger" } ] -
type推荐用vcs(简单直接),别用package(手动维护太容易出错) - 如果 Git 仓库需要认证,凭据不能写进
composer.json,得走auth.json文件,且权限必须是600
版本号不等于 Git tag?那它就根本不存在
Composer 的版本解析完全依赖 Git 标签(tag),不是靠 composer.json 里的 version 字段——那个字段会被直接忽略。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 错:
git commit -m "v1.2.0"就以为发布了;或者打 tag 写成1.2.0(缺v前缀) - 对:必须
git tag -a v1.2.0 -m "Release v1.2.0",再git push --tags - 合法 tag 格式只有两种:
vX.Y.Z或X.Y.Z(如v2.0.1或2.0.1),dev-main、feature/login、v1.2都不算正式版本 - 改过 tag 对应的 commit 后强制推送?Composer 可能还在用缓存旧内容,记得
composer clear-cache
autoload 配错,类就永远找不到
PSR-4 映射不是“看着像就行”,命名空间、目录路径、文件名三者必须严丝合缝,差一个斜杠或大小写都报 Class not found。
- 错:
"MyVendorMyPackage": "src/"(结尾多了一个反斜杠);或src/MyClass.php里写的是namespace MyVendorMyPackage;,但composer.json里写成了"MyVendorMyPackage\": "src/" - 对:确保
autoload.psr-4的键是完整命名空间 +\(两个反斜杠在 JSON 里实际表示一个),值是真实存在的相对路径,比如:"autoload": { "psr-4": { "MyVendor\MyPackage\": "src/" } } - 改完
composer.json后必须运行composer dump-autoload,否则新映射不生效 - 不要把测试类或命令行脚本塞进
autoload,它们该进autoload-dev
require-dev 乱塞工具,上线就翻车
开发时用的工具(比如 phpunit/phpunit、phpstan/phpstan)如果被写进根级 require,就会变成所有依赖该项目的用户也得装这些——纯属污染依赖树。
- 错:在私有包的
composer.json里把phpunit/phpunit放进require - 对:一律放进
require-dev,并确保项目启用--no-dev安装生产环境依赖 - CI 环境中别用
composer config --global写 token,不同项目可能用不同账号,应通过COMPOSER_AUTH环境变量注入 JSON 字符串 - 私有包若依赖其他私有包,别在自己包里硬写
repositories——那是使用者的事,你只管在require里写清名字和版本约束
repositories 声明位置、autoload 路径与命名空间的咬合关系——这三个地方出错,90% 的私有包卡在“明明写了却装不上”。其他都是锦上添花,先踩稳这三步再说。










