composer.json
项目安装
在项目中创建一个 composer.json
文件,在文件中中指定 require
的值来告诉 Composer
你的项目需要依赖哪些包
{
"require": {
"monolog/monolog": "1.0.*"
}
}
上例中,monolog/monolog
是包的名称,1.0.*
是包的版本。
包名称
包名称由供应商名称和其项目名称构成。通常容易产生相同的项目名称,而供应商名称的存在则很好的解决了命名冲突的问题。它允许两个不同的人创建同样名为 json
的库,而之后它们将被命名为 igorw/json
和 seldaek/json
。
包版本
在前面的例子中,我们引入的 monolog
版本指定为 1.0.*
。这表示任何从 1.0
开始的开发分支,它将会匹配 1.0.0
、1.0.2
或者 1.0.20
。
版本约束可以用以下几个不同的方法来指定:
名称 | 实例 | 描述 |
---|---|---|
确切的版本号 | 1.0.2 |
指定包的确切版本。 |
范围 | >=1.0 >=1.0,<2.0 >=1.0,<1.1|>=1.2 |
通过使用比较操作符可以指定有效的版本范围。 有效的运算符:> 、>= 、< 、<= 、!= 。还可以定义多个范围:用逗号隔开,表示一个逻辑 AND 。用 | 隔开表示逻辑 OR 。AND 的优先级高于 OR 。 |
通配符 | 1.0.* |
1.0.* 与 >=1.0,<1.1 是等效的。 |
赋值运算符 | ~1.2 |
~1.2 相当于 >=1.2,<2.0 。~1.2.3 相当于 >=1.2.3,<1.3 |
赋值运算符 | ^1.2 |
^1.2 相当于 >=1.2,<2.0 。^1.2.3 相当于 >=1.2.3,<2.0.0 |
install 命令,安装依赖
执行 composer install
命令,Composer
会读取 composer.json
,查找并下载满足条件的最新的依赖,并把安装时确切的版本号列表写入 composer.lock
文件。
当你本地如果已经存在一份 composer.lock
时,它将会去读取你的 composer.lock
而非 composer.json
,并且以此为标准去下载依赖。
update 命令,更新依赖
执行 composer update
命令,Composer
会读取 composer.json
(不管本地有没有composer.lock
文件),查找满足条件的最新的依赖,如果本地没有 composer.lock
文件,或者查找到的依赖版本高于 composer.lock
文件记录的版本,则更新本地的依赖。
如果你不希望影响别的已经安装的依赖,仅仅更新你修改的部分,那你可以通过指定白名单来确定要更新的范围,例如 composer update monolog/monolog
仅会更新 monolog/monlog
这个依赖,别的依赖哪怕有更新也会被忽略
install和update对比
命令 | composer.lock 文件 |
操作 |
---|---|---|
install | 无 | 安装依赖 |
update | 无 | 安装依赖 |
install | 有 | 无操作 |
update | 有 | 尝试更新依赖 |
如果你把 composer.lock
纳入项目的版本控制中,那么你就可以确保你项目中的每一个人、每一台电脑,不管什么系统,都能拉取到一模一样的依赖,以减少潜在的依赖对部署的影响。当然,请记得,你应该使用的命令是 composer install
。
require 命令,安装或更新依赖
require
命令安装或更新依赖包。如果还没有 composer.json
文件,会自动生成,如果依赖已存在,则会更新。
require
命令可以通过交互的方式指定依赖包:
composer require
#根据提示搜索包、选择包、输入版本号
#输入版本号并回车后,会继续提示“Search for a package:”,如果需要添加其他包,重复上述步骤,如果不需要添加其他包,则回车开始执行添加。
也可以直接指定依赖包及其版本:
composer require monolog/monolog:1.24.*
remove 命令,移除依赖
composer remove monolog/monolog
自动加载
对于库的自动加载信息,Composer
生成了一个 vendor/autoload.php
文件。需要引入这个文件
require 'vendor/autoload.php';
例如:如果你的项目依赖 monolog,你就可以像这样开始使用这个类库,并且他们将被自动加载。
$log = new Monolog\Logger('name');
$log->pushHandler(new Monolog\Handler\StreamHandler('app.log', Monolog\Logger::WARNING));
$log->addWarning('Foo');
也可以在 composer.json
的 autoload
字段中增加自己的 autoloader
。
{
"autoload": {
"psr-4": {
"Acme\\": "src/"
}
}
}
Composer 将注册一个 PSR-4 autoloader 到 Acme 命名空间。
添加 autoload
字段后,你应该再次运行 composer install
命令来生成 vendor/autoload.php
文件