composer包的composer.json需严格遵循规范:name须为vendor/name格式且符合字符限制,type决定处理方式,autoload必须正确配置psr-4并执行dump-autoload,require与require-dev须分离,版本依赖靠git tag而非version字段,minimum-stability上线前须设为stable。

Composer 包的 composer.json 不是“写完就能用”,核心在于声明准确的依赖边界和加载规则——漏掉 autoload,本地 require 会报类找不到;写错 type 或 name 格式,Packagist 就拒绝收录。
name 和 type 必须符合 Packagist 规范
包名不是随便起的:vendor/name 格式中,vendor 必须是你在 Packagist 注册的用户名(或组织名),name 只能含小写字母、数字、连字符和下划线。不满足会直接被 Packagist 拒绝提交。
type 决定 Composer 如何处理这个包。常见值有:
-
library:默认值,纯代码库(最常用) -
project:完整应用(如 Symfony 模板),不会被其他包require -
metapackage:只用于依赖聚合,自身无代码 -
wordpress-plugin等:需配合对应插件加载器,非标准 autoload 不生效
autoload 是本地开发能跑起来的关键
没有正确配置 autoload,即使文件存在,composer install 后也找不到类——因为 Composer 不知道从哪加载。
推荐优先用 psr-4(支持命名空间映射):
"autoload": {
"psr-4": {
"MyVendor\MyPackage\": "src/"
}
}
注意点:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 命名空间末尾必须带反斜杠
\,漏掉会导致自动加载失败 - 路径
src/是相对于composer.json的,不能写成./src/或绝对路径 - 开发时改了
autoload,必须运行composer dump-autoload才生效(不是install或update)
require 和 require-dev 要严格区分运行时与开发时依赖
require 里的包,是任何使用你这个包的项目都必须安装的;require-dev 只在你本地开发时需要(比如测试工具、代码检查)。
常见错误:
- 把
phpunit/phpunit写进require→ 别人装你包时会强制装 PHPUnit,不合理 - 没锁 PHP 版本,比如漏掉
"php": "^8.1"→ 在 PHP 7.4 下可能因语法报错,但 Composer 不报错 - 用了 dev-main 或分支别名(如
"monolog/monolog": "dev-main as 3.0.x-dev")→ 发布稳定版后必须删掉,否则 Packagist 不认
版本号和稳定性标识直接影响别人能否装上
如果你的包 composer.json 中 "version" 字段写死为 "1.0.0",且没打 Git tag,Composer 会忽略该字段;真正起作用的是 Git tag(如 v1.0.0)。
发布前必须:
- Git commit 干净,且已 push 到远程
- 打 tag:
git tag v1.0.0,再git push --tags - 确保
minimum-stability是stable(默认),否则别人require时得显式加@dev
私有包或早期迭代可设 "minimum-stability": "dev",但上线前务必改回 stable,否则用户 require 时容易意外拉到不稳定快照。










