Composer 基本使用:从依赖安装到常用命令一次讲清

沈知远
沈知远
发布时间:2026-08-25| 164人浏览过
原创

前言

在很多 PHP 项目里,Composer 是天天会用到的工具,但不少人只会执行命令,却分不清 composer.json、composer.lock 和 vendor 各自负责什么。本文用一个安装 monolog/monolog 的小例子,把依赖安装、自动加载和常用命令串起来讲清楚,帮助你判断哪些文件该提交、哪些目录别手改、不同命令又该在什么场景下使用。

在 PHP 项目里,Composer 往往是最先接触、也最容易“会用但没真正理解”的工具。本文从安装一个日志库开始,按项目文件、自动加载和常用命令三部分拆开说明,帮助你判断每个文件该不该改、什么时候该用 install、什么时候该用 update。

先从一个依赖安装示例开始

如果项目需要引入日志库 monolog/monolog,最直接的做法就是在项目目录执行下面这条命令:

composer require monolog/monolog

执行完成后,Composer 会在项目里生成或更新 composer.json。这个文件的核心作用,是描述当前项目依赖了哪些库、依赖版本约束是什么,同时也可以保存项目的一些元数据。像 Laravel、Yii 这类主流 PHP 框架项目,通常都会自带这个文件。

对日常开发来说,可以把这一步理解为:你不是手动下载第三方包放进项目,而是把依赖关系交给 Composer 统一管理。

Composer 相关文件各自负责什么

一个启用了 Composer 的 PHP 项目里,最关键的通常是下面三个目录或文件:

Composer 三个核心文件与目录的关系图,突出 composer.json、composer.lock 和 vendor 的分工
Composer 三个核心文件怎么分工把声明文件、锁文件和依赖目录放到一张图里,更容易理解 Composer。
vendor
composer.json
composer.lock

vendor:第三方依赖的实际存放位置

vendor 目录里放的是已经安装到本地项目中的依赖库,也就是项目所有第三方代码的默认位置。这个目录通常不建议手动修改,因为每次执行依赖安装或更新时,里面的内容都可能被重新覆盖。

Composer 自动加载与日志库使用流程图,展示引入 vendor/autoload.php 后调用 Monolog 写日志的路径
自动加载把库接进项目这张图对应最小使用路径:加载自动加载文件、实例化库、最终把日志写到目标文件。

composer.json:项目依赖关系的声明文件

composer.json 记录的是项目需要哪些依赖、版本要求是什么,以及其他与 Composer 相关的配置数据。可以把它看成“项目希望安装什么”的声明。

composer.lock:把实际安装版本锁定下来

当依赖安装完成后,Composer 会把当次解析出的确切版本写入 composer.lock。这个文件的意义非常直接:它能锁定项目使用的具体依赖版本,避免不同开发者、不同环境拉到不一致的包。

这也是多人协作里非常重要的一点。提交 composer.lock 后,团队成员在开发环境执行安装时,通常就能拿到相同版本的依赖;部署到生产环境时,也更容易保持与开发环境一致。

原文这里特别提到,在执行 composer install package_name 命令时会优先检查锁文件是否存在;如果存在,就按锁文件中的指定版本安装,而不是重新依据 composer.json 做一次版本解析。对于理解 Composer 的使用习惯来说,重点就在于:lock 文件存在时,安装结果会更稳定、更可重复。

安装后怎么在项目里直接使用库

Composer 不只是管理依赖下载,还会帮项目生成自动加载能力。安装依赖后,你会得到一个 vendor/autoload.php 文件,项目只要引入它,就能直接使用这些库提供的类,而不需要自己逐个 require 对应文件。

例如在项目中创建一个 index.php:

<?php

require __DIR__ . '/vendor/autoload.php';

$log = new MonologLogger('name');
$log->pushHandler(new MonologHandlerStreamHandler('logs/app.log', MonologLogger::DEBUG));
$log->info('Foo');

然后执行:

php index.php

运行后,这段代码会把日志写入 logs/app.log。这个例子展示的核心不是日志本身,而是 Composer 的自动加载机制已经接管了第三方类的引入流程。也就是说,只要依赖已正确安装,并且入口文件加载了 vendor/autoload.php,后续使用库时就不必再手动处理类文件路径。

几条最常用的 Composer 命令

composer install

composer install

这条命令会读取当前目录下的 composer.json,解析依赖并安装到 vendor 目录中。

如果项目中已经存在 composer.lock,那么 Composer 会直接按照锁文件中的确切版本安装依赖,这样不同开发者拿到的依赖版本会保持一致;如果没有锁文件,Composer 会先解析依赖,再生成对应的 composer.lock。

composer update

composer update

这条命令会根据 composer.json 中定义的依赖要求,重新获取符合条件的较新版本,并把最终解析出的确切版本写回 composer.lock。如果你想刷新项目依赖,而不是严格按现有锁文件安装,就会用到它。

composer require vendor/package

composer require vendor/package

用于安装指定包,并把它写入 composer.json。如果当前项目还没有这个文件,Composer 也会即时创建。

composer remove vendor/package

composer remove vendor/package

用于移除指定的软件包,同时更新项目中的依赖声明。

composer self-update

composer self-update

这条命令更新的是 Composer 工具本身,而不是项目依赖。也就是说,它解决的是“包管理器版本是否最新”的问题,不是“项目用了哪些第三方库”的问题。

实际使用时最值得记住的几件事

如果只保留最关键的认知,可以记住这几条:

  • composer require monolog/monolog 这类命令用于把新依赖加入项目。
  • composer.json 说明项目需要什么依赖。
  • composer.lock 记录项目实际安装了哪些具体版本,适合保证团队环境一致。
  • vendor 是第三方代码目录,通常不要手工改动。
  • 项目代码要使用已安装库时,先加载 vendor/autoload.php。

把这些基础关系理顺之后,再看 Composer 的其他高级功能就会容易很多,因为它的核心逻辑始终没有变:声明依赖、安装依赖、锁定版本、自动加载。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。