Composer上手只需会写require_once 'vendor/autoload.php'并运行composer require;安装推荐本地方式,Windows用Setup.exe、macOS用brew、Linux用curl命令;初始化项目需composer init并配置autoload;添加包用composer require而非手动改json;vendor/autoload.php是自动加载总开关,不可删除或单独require。

Composer 不是“学”出来的,是“用”出来的——只要你会写 require_once 'vendor/autoload.php',再跑通一次 composer require,你就已经上手了。
怎么在原生 PHP 项目里装上 Composer
别被“全局安装”绕晕,你真正需要的只是一步到位的本地可用命令。Windows 用户直接去 getcomposer.org/download/ 下载 Composer-Setup.exe,双击按提示走完就行;macOS 用户用 Homebrew 最省心:brew install composer;Linux 用户推荐一行命令搞定:curl -sS https://getcomposer.org/installer | php && sudo mv composer.phar /usr/local/bin/composer。
验证是否装好?终端里敲:composer --version。看到版本号(比如 2.7.7),就说明它已经在你系统里待命了。
- 别跳过散列校验(尤其手动下载
composer-setup.php时),否则可能加载损坏的安装器 - 如果
composer命令报 “command not found”,说明没进 PATH,临时补救:用php composer.phar替代 - 不建议把
composer.phar放进项目目录长期用——容易误提交、版本混乱
怎么初始化一个已有 PHP 项目的依赖管理
进你的项目根目录(比如 my-legacy-app/),执行:composer init。它会问你项目名、作者、描述这些,全回车默认也行;关键一步是配置自动加载——强烈建议填:psr-4 + App => src/(假设你准备把类文件挪到 src/ 下并加 namespace App;)。
生成的 composer.json 至少长这样:
{
"autoload": {
"psr-4": {
"App\": "src/"
}
}
}
- 别跳过
"autoload"配置——否则你自己的类不会被自动加载,require_once还得手写一堆 - 如果项目已有大量无命名空间的老代码,先别急着重构,可改用
"classmap"模式扫描目录:"classmap": ["lib/", "includes/"] -
composer.json里暂时空着"require"也没关系,后面用require命令加更安全
怎么加一个包(比如 Monolog)并确保能用上
在项目根目录运行:composer require monolog/monolog。Composer 会自动做三件事:下载包到 vendor/、更新 composer.json 的 require 字段、生成或刷新 vendor/autoload.php。
然后在你的入口文件(如 index.php)顶部加上这一行:
require_once 'vendor/autoload.php';
接着就能直接用了:
$log = new MonologLogger('web');<br>$log->pushHandler(new MonologHandlerStreamHandler('php://stderr'));
- 别手动改
composer.json再跑composer install——容易漏掉依赖或版本约束,require命令才是唯一推荐方式 - 如果报错
Class 'MonologLogger' not found,先确认是否漏了require_once 'vendor/autoload.php',再检查命名空间拼写(MonologLogger不是Monolog/Logger) - 国内用户若下载慢,立刻配镜像:
composer config -g repo.packagist composer https://packagist.phpcomposer.com(注意:该镜像已于 2025 年底停用,现推荐用https://mirrors.aliyun.com/composer/)
为什么 vendor/autoload.php 不能删、不能乱 require
vendor/autoload.php 是 Composer 自动生成的“加载总开关”,它把所有 PSR-4、PSR-0、classmap、files 类型的自动加载逻辑都串起来了。你只引它一个,就能用上自己写的 App* 类、Monolog*、甚至其他包里的类。
- 千万别在代码里对每个第三方类单独
require——这会让 Composer 的自动加载机制失效,且无法处理依赖嵌套 - 如果项目有多个入口(如
index.php、cli.php、api/v1/index.php),每个都要加同一行require_once 'vendor/autoload.php',路径要写对(常用__DIR__.'/../vendor/autoload.php') -
vendor/目录不该提交进 Git,但composer.lock必须提交——它锁定了所有人装出来的包版本,避免“在我机器上好好的”这类问题
最常被忽略的一点:autoload 配置改了之后,必须运行 composer dump-autoload 才生效,不是改完 composer.json 就自动重载的。










