最直接有效的方式是将安装说明放在根目录 README.md 中;composer.json 的 description 字段仅用于 Packagist 搜索摘要,不可塞安装步骤;scripts 可封装命令并用注释说明用途,而 type、autoload 等字段有明确职责,误用会导致功能异常。

Composer 项目没有内置的“安装说明文档”字段,composer.json 本身不支持直接写 Markdown 或富文本的安装指南。所谓“配置安装说明”,实际是通过约定位置、辅助字段或外部工具间接实现的。
如何让使用者快速看到安装/使用说明
最直接有效的方式是把说明放在项目根目录的 README.md —— 所有 GitHub/GitLab 页面、Packagist 包页、IDE(如 PHPStorm)都会自动识别并渲染它。Composer 不读取这个文件,但它是事实标准。
-
composer.json中的description字段应简明扼要,用于 Packagist 搜索摘要,例如:"description": "A Laravel service provider for caching HTTP responses" - 不要在
description里塞安装步骤,它会被截断显示(Packagist 只展示前 120 字左右) - 若需动态生成安装命令(如带版本号的
require),可用scripts配合composer run-script封装,但不替代文档
composer.json 关键字段的真实作用与常见误用
很多字段被当成“文档占位符”,其实它们有明确职责和生效范围,乱填反而引发问题:
-
type:影响 Composer 的安装行为(如library→ 放vendor/;project→ 不被其他包 require;metapackage→ 仅触发依赖安装)。填错会导致依赖无法加载或 CI 失败 -
autoload和autoload-dev:定义类自动加载规则,不是文档字段。路径写错会直接导致Class not found,且 Composer dump-autoload 不会报错,只静默跳过无效配置 -
support:仅用于 Packagist 显示链接(email,issues,source等),不参与任何逻辑。填错 URL 会导致用户点进去 404,但不影响安装 -
keywords:纯搜索关键词,对功能无影响,但写得太泛(如["php", "tool"])会降低 Packagist 搜索排名
需要嵌入命令式说明?用 scripts + 注释代替
如果真想把“执行什么命令”固化进 composer.json,唯一可靠方式是利用 scripts,并在注释中说明用途 —— 因为只有这里会被 composer run-script 执行,且 IDE 和 CI 能识别:
{
"scripts": {
"install:dev": [
"@composer install --no-interaction",
"php artisan migrate:fresh --seed"
],
"post-install-cmd": [
"echo \"✅ Project installed. Run 'php artisan serve' to start.\""
]
}
}
-
post-install-cmd和post-update-cmd是钩子,会在每次composer install后运行,适合输出提示 - 避免在钩子里放耗时操作(如下载大文件),会拖慢所有开发者安装流程
- 脚本中用
echo输出说明时,加 Emoji 或颜色(如\033[32m)可提升可读性,但注意 Windows CMD 兼容性
为什么别折腾“文档字段”的根本原因
Composer 的设计哲学是“配置即契约”,composer.json 描述的是“如何构建”,不是“如何理解”。所有试图把它当作文档容器的做法,最终都会遇到三个硬限制:
- Packagist 不解析或展示
readme、docs、instructions这类自定义字段(即使你加了,也完全没用) - IDE 和静态分析工具(如 PHPStan、Psalm)只认标准字段,非标字段会被忽略或报 warning
- CI/CD 流水线(如 GitHub Actions)通常只检查
composer validate,而它默认只校验语法和必需字段,不会验证你写的“说明”是否合理
真正该花时间的地方,是写好 README.md 里的 Installation 和 Usage 章节,并确保所有 composer.json 字段语义准确 —— 前者给人看,后者给机器读,边界划清了,事情才不会反复返工。










