composer init仅生成基础composer.json,不创建目录或源码;须在空目录运行,按vendor/name格式设包名,PHP版本填^8.1等,关键选Package name含斜杠、Minimum Stability依需设dev、License填MIT;生成后需补autoload、运行dump-autoload、配置bin并install。

直接运行 composer init 不会自动创建项目目录或写入源码,它只生成一个基础 composer.json —— 如果你想要的是“从零开始的可运行 PHP 项目”,光靠这一步远远不够。
执行 composer init 前必须确认的事
它不会检查当前目录是否为空,也不会阻止你在已有代码的目录里覆盖 composer.json。一旦你中途按错回车或输错包名,就得重来(没有撤销)。
- 确保在**空目录**中运行,避免污染已有项目
- 提前想好项目名称格式:
vendor/name(如myorg/blog-api),否则后续改名要手动同步autoload和命名空间 - PHP 版本约束填
^8.1或^8.2,别写*或留空,否则默认生成>=5.3.0,可能引发依赖冲突
composer init 过程中关键选项怎么选
交互式提问共 7 步,真正影响后续开发的是这三项:
-
Package name:必须含斜杠,如
acme/utils;若填utils,Composer 会警告并强制补成root/utils,后期发布到 Packagist 会失败 -
Minimum Stability:默认
stable安全,但如果你依赖 dev 分支的包(如"monolog/monolog": "dev-main"),得临时设为dev,否则安装报错Could not find package ... in a version matching dev-main -
License:填
MIT或Apache-2.0即可,别留空,否则composer validate会提示license is required
生成后立刻要做的三件事
生成的 composer.json 是最小可用配置,不加处理无法自动加载类或运行脚本:
立即学习“PHP免费学习笔记(深入)”;
- 补全
autoload配置,例如项目用 PSR-4,就加上:
{
"autoload": {
"psr-4": {
"App\\": "src/"
}
}
}
- 运行
composer dump-autoload才能生效,否则new App\\SomeClass()会报Class 'App\SomeClass' not found - 如果要支持命令行执行(如
php bin/app.php),需在composer.json中声明bin:
{
"bin": ["bin/app.php"]
}
然后运行 composer install,bin/app.php 才会被软链接到 vendor/bin/ 下。
很多人卡在“为什么 new App\\Foo 找不到类”,其实只是忘了 dump-autoload;也有人以为 init 后就能直接 require 'vendor/autoload.php',却没建 src/ 目录——这些都不是命令的问题,是初始化后的衔接动作被跳过了。











