composer介绍

Composer介绍

Composer 是 PHP 的一个依赖管理工具。它允许你申明项目所依赖的代码库,它会在你的项目中为你安装他们。

在这里插入图片描述

Composer能够解决的问题

a) 你有一个项目依赖于若干个库。

b) 其中一些库依赖于其他库。

c) 你声明你所依赖的东西。

d) Composer 会找出哪个版本的包需要安装,并安装它们(将它们下载到你的项目中)。

Composer如何声明依赖关系

比方说,你正在创建一个项目,你需要一个库来做日志记录。你决定使用 monolog。为了将它添加到你的项目中,你所需要做的就是创建一个 composer.json 文件,其中描述了项目的依赖关系。

{
    "require": {
        "monolog/monolog": "1.2.*"
    }}12345

我们只要指出我们的项目需要一些 monolog/monolog 的包,从 1.2 开始的任何版本。

如何安装Composer

1、下载 Composer 的可执行文件
局部安装

安装 Composer:

curl -sS https://getcomposer.org/installer | php1

或者可以通过 php >下载安装器:

php -r "readfile('https://getcomposer.org/installer');" | php1

这部分操作会检查一些 PHP 的设置,然后下载 composer.phar 到工作目录中。这是 Composer 的二进制文件。

这是一个 PHAR 包(PHP 的归档),这是 PHP 的归档格式可以帮助用户在命令行中执行一些操作。

可以通过 --install-dir 选项指定 Composer 的安装目录(它可以是一个绝对或相对路径):

curl -sS https://getcomposer.org/installer | php -- --install-dir=bin1
全局安装

可以执行这些命令让 composer 在系统中进行全局调用:

curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer12
2、在Mac环境下安装(全局)

Composer 是 homebrew-php 项目的一部分,需要执行一下的命令。

brew update
brew tap josegonzalez/homebrew-php
brew tap homebrew/versions
brew install php55-intl
brew install josegonzalez/php/composer12345
3、在Windows环境下安装(全局)

下载并且运行 Composer-Setup.exe,它将安装最新版本的 Composer ,并设置好系统的环境变量,可以在任何目录下直接使用 composer 命令。

Composer用法

1、项目安装(composer.json)

要开始在你的项目中使用 Composer,你只需要一个 composer.json 文件。该文件包含了项目的依赖和其它的一些元数据。它允许你定义嵌套结构。

2、关于 require Key

第一件事情(并且往往只需要做这一件事),你需要在 composer.json 文件中指定 require key 的值。你只需要简单的告诉 Composer 你的项目需要依赖哪些包。

{
    "require": {
        "monolog/monolog": "1.0.*"
    }}12345

你可以看到, require 需要一个 包名称 (例如 monolog/monolog) 映射到 包版本 (例如 1.0.*) 的对象。

3、包名称

包名称由供应商名称和其项目名称构成。通常容易产生相同的项目名称,而供应商名称的存在则很好的解决了命名冲突的问题。它允许两个不同的人创建同样名为 json 的库,而之后它们将被命名为 igorw/jsonseldaek/json

这里我们需要引入 monolog/monolog,供应商名称与项目的名称相同,对于一个具有唯一名称的项目,我们推荐这么做。它还允许以后在同一个命名空间添加更多的相关项目。如果你维护着一个库,这将使你可以很容易的把它分离成更小的部分。

4、包版本

在前面的例子中,我们引入的 monolog 版本指定为 1.0.*。这表示任何从 1.0 开始的开发分支,它将会匹配 1.0.01.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。想要了解更多,请阅读下一小节。

5、下一个重要版本(波浪号运算符)

~ 最好用例子来解释: ~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. 部分是固定的。

安装依赖包

获取定义的依赖到你的本地项目,只需要调用 composer.phar 运行 install 命令。

php composer.phar install1

接着前面的例子,这将会找到 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 update1

如果只想安装或更新一个依赖,你可以白名单它们:

php composer.phar update monolog/monolog \[...\]1

注意: 对于库,并不一定建议提交锁文件 请参考:库的锁文件.

Packagist

packagist 是 Composer 的主要资源库。 一个 Composer 的库基本上是一个包的源:记录了可以得到包的地方。Packagist 的目标是成为大家使用库资源的中央存储平台。这意味着你可以 require 那里的任何包。

当你访问 packagist website (packagist.org),你可以浏览和搜索资源包。

任何支持 Composer 的开源项目应该发布自己的包在 packagist 上。虽然并不一定要发布在 packagist 上来使用 Composer,但它使我们的编程生活更加轻松。

自动加载

对于库的自动加载信息,Composer 生成了一个 vendor/autoload.php 文件。你可以简单的引入这个文件,你会得到一个免费的自动加载支持。

require 'vendor/autoload.php';1

这使得你可以很容易的使用第三方代码。例如:如果你的项目依赖 monolog,你就可以像这样开始使用这个类库,并且他们将被自动加载。

$log = new Monolog\\Logger('name');$log->pushHandler(new Monolog\\Handler\\StreamHandler('app.log', Monolog\\Logger::WARNING));$log->addWarning('Foo');1234

你可以在 composer.jsonautoload 字段中增加自己的 autoloader。

{
    "autoload": {
        "psr-4": {"Acme\\\": "src/"}
    }}12345

Composer 将注册一个 PSR-4 autoloader 到 Acme 命名空间。

你可以定义一个从命名空间到目录的映射。此时 src 会在你项目的根目录,与 vendor 文件夹同级。例如 src/Foo.php 文件应该包含 Acme\Foo 类。

添加 autoload 字段后,你应该再次运行 install 命令来生成 vendor/autoload.php 文件。

引用这个文件也将返回 autoloader 的实例,你可以将包含调用的返回值存储在变量中,并添加更多的命名空间。这对于在一个测试套件中自动加载类文件是非常有用的,例如。

$loader = require 'vendor/autoload.php';$loader->add('Acme\\\Test\\\', \_\_DIR\_\_);12

除了 PSR-4 自动加载,classmap 也是支持的。这允许类被自动加载,即使不符合 PSR-0 规范。详细请查看 自动加载-参考

注意: Composer 提供了自己的 autoloader。如果你不想使用它,你可以仅仅引入 vendor/composer/autoload_*.php 文件,它返回一个关联数组,你可以通过这个关联数组配置自己的 autoloader。
安装 install


composer install是从composer.lock读取第三方组件及其版本,并将其安装到vendor目录下。
如果composer.lock文件不存在,则读取composer.json第三方组件及其版本,然后安装到vendor目录下。

更新 update

update是直接从composer.json获取第三方组件及其版本,然后更新composer.lock文件。
如果依赖的第三方组件有版本更新,update会将最新的版本安装到vendor目录下,并更新composer.lock

使用经验

在生产环境下,直接使用composer update命令是有较大风险的,因为可能存在测试阶段使用了版本的第三方组件库,在上线打包的时候执行了composer update命令,导致第三方组件更新未经测试直接发布的问题出现。
比较推荐的做法是在版本管理过程中,将composer.jsoncomposer.lock都加入到版本管理中,在开发过程中注意composer.lock中依赖版本的变化,每次上线打包使用composer install,从composer.lock中获取依赖的第三方组件和版本。
如果需要更新第三方组件,执行composer update命令时,应该在后面追加有必要更新的组件库

参考文档:https://docs.phpcomposer.com/03-cli.html#install
富文本转markdown:https://www.bejson.com/convert/ueditor2markdown/#install

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值