更多文档请参阅:https://docs.phpcomposer.com/
composer.json:项目安装
要开始在你的项目中使用 Composer,你只需要一个 composer.json
文件。该文件包含了项目的依赖和其它的一些元数据。
这个 JSON format 是很容易编写的。它允许你定义嵌套结构。
关于 require
Key
第一件事情(并且往往只需要做这一件事),你需要在 composer.json
文件中指定 require
key 的值。你只需要简单的告诉 Composer 你的项目需要依赖哪些包。
{
"require": {
"monolog/monolog": "1.0.*"
}
}
你可以看到, require
需要一个 包名称 (例如 monolog/monolog
) 映射到 包版本 (例如 1.0.*
) 的对象。
包名称
包名称由供应商名称和其项目名称构成。通常容易产生相同的项目名称,而供应商名称的存在则很好的解决了命名冲突的问题。它允许两个不同的人创建同样名为 json
的库,而之后它们将被命名为 igorw/json
和 seldaek/json
。
这里我们需要引入 monolog/monolog
,供应商名称与项目的名称相同,对于一个具有唯一名称的项目,我们推荐这么做。它还允许以后在同一个命名空间添加更多的相关项目。如果你维护着一个库,这将使你可以很容易的把它分离成更小的部分。
包版本
在前面的例子中,我们引入的 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
相当于 >=1.2,<2.0
,而 ~1.2.3
相当于 >=1.2.3,<1.3
。正如你所看到的这对于遵循 语义化版本号 的项目最有用。一个常见的用法是标记你所依赖的最低版本,像 ~1.2
(允许1.2以上的任何版本,但不包括2.0)。由于理论上直到2.0应该都没有向后兼容性问题,所以效果很好。你还会看到它的另一种用法,使用 ~
指定最低版本,但允许版本号的最后一位数字上升。
注意: 虽然
2.0-beta.1
严格地说是早于2.0
,但是,根据版本约束条件, 例如~1.2
却不会安装这个版本。就像前面所讲的~1.2
只意味着.2
部分可以改变,但是1.
部分是固定的。
稳定性
默认情况下只有稳定的发行版才会被考虑在内。如果你也想获得 RC、beta、alpha 或 dev 版本,你可以使用 稳定标志。你可以对所有的包做 最小稳定性 设置,而不是每个依赖逐一设置。
安装依赖包
获取定义的依赖到你的本地项目,只需要调用 composer.phar
运行 install
命令。
php composer.phar install
接着前面的例子,这将会找到 monolog/monolog
的最新版本,并将它下载到 vendor
目录。 这是一个惯例把第三方的代码到一个指定的目录 vendor
。如果是 monolog 将会创建 vendor/monolog/monolog
目录。
小技巧: 如果你正在使用Git来管理你的项目, 你可能要添加
vendor
到你的.gitignore
文件中。 你不会希望将所有的代码都添加到你的版本库中。
另一件事是 install
命令将创建一个 composer.lock
文件到你项目的根目录中。
composer.lock
– 锁文件
在安装依赖后,Composer 将把安装时确切的版本号列表写入 composer.lock
文件。这将锁定改项目的特定版本。
请提交你应用程序的 composer.lock
(包括 composer.json
)到你的版本库中
这是非常重要的,因为 install
命令将会检查锁文件是否存在,如果存在,它将下载指定的版本(忽略 composer.json
文件中的定义)。
这意味着,任何人建立项目都将下载与指定版本完全相同的依赖。你的持续集成服务器、生产环境、你团队中的其他开发人员、每件事、每个人都使用相同的依赖,从而减轻潜在的错误对部署的影响。即使你独自开发项目,在六个月内重新安装项目时,你也可以放心的继续工作,即使从那时起你的依赖已经发布了许多新的版本。
如果不存在 composer.lock
文件,Composer 将读取 composer.json
并创建锁文件。
这意味着如果你的依赖更新了新的版本,你将不会获得任何更新。此时要更新你的依赖版本请使用 update
命令。这将获取最新匹配的版本(根据你的 composer.json
文件)并将新版本更新进锁文件。
php composer.phar update
如果只想安装或更新一个依赖,你可以白名单它们:
php composer.phar update monolog/monolog [...]
注意: 对于库,并不一定建议提交锁文件
锁文件
如果你愿意,可以在你的项目中提交 composer.lock
文件。他将帮助你的团队始终针对同一个依赖版本进行测试。任何时候,这个锁文件都只对于你的项目产生影响。
如果你不想提交锁文件,并且你正在使用 Git,那么请将它添加到 .gitignore
文件中。
发布到 VCS(线上版本控制系统)
一旦你有一个包含 composer.json
文件的库存储在线上版本控制系统(例如:Git),你的库就可以被 Composer 所安装。在这个例子中,我们将 acme/hello-world
库发布在 GitHub 上的 github.com/username/hello-world
中。
现在测试这个 acme/hello-world
包,我们在本地创建一个新的项目。我们将它命名为 acme/blog
。此博客将依赖 acme/hello-world
,而后者又依赖 monolog/monolog
。我们可以在某处创建一个新的 blog
文件夹来完成它,并且需要包含 composer.json
文件:
{
"name": "acme/blog",
"require": {
"acme/hello-world": "dev-master"
}
}
在这个例子中 name
不是必须的,因为我们并不想将它发布为一个库。在这里为 composer.json
文件添加描述。
现在我们需要告诉我们的应用,在哪里可以找到 hello-world
的依赖。为此我们需要在 composer.json
中添加 repositories
来源申明:
{
"name": "acme/blog",
"repositories": [
{
"type": "vcs",
"url": "https://github.com/username/hello-world"
}
],
"require": {
"acme/hello-world": "dev-master"
}
}
更多关于包的来源是如何工作的,以及还有什么其他的类型可供选择,请查看资源库。
这就是全部了。你现在可以使用 Composer 的 install
命令来安装你的依赖包了!
小结: 任何含有 composer.json
的 GIT
、SVN
、HG
存储库,都可以通过 require
字段指定“包来源”和“声明依赖”来添加到你的项目中。
composer create-project laravel/laravel folder_name
composer create-project laravel/laravel folder_name --prefer-dist "5.8.*"
composer install
composer install --prefer-dist
composer update
composer update package/name
composer dump-autoload [--optimize]
composer self-update
composer require [options] [--] [vendor/packages]...
// 全局安装
composer require global vendor/packages
// 罗列所有扩展包括版本信息
composer show
composer install --prefer-dist --no-progress