Composer教程之基础用法

摘要:
在下一部分中,我将总结如何在实际项目中使用Composer。对于供应商目录,Composer的惯例是将第三方代码传输给指定的目录供应商。Packagist是Composer的主要资源库。Composer库基本上是包的来源:它记录可以从哪里获得包。归根结底,Composer是一个依赖关系管理工具。对于现有库,我们需要将其加载到项目中。对于库的自动加载信息,Composer生成一个供应商/自动加载Php文件。Composer帮助我们完成所有这些任务。我们只需要在应用层中使用它们。
前言

   我们已经安装了Composer,那么如何在我们的项目中使用Composer呢?接下来的部分,我将对实际项目中如何使用Composer进行总结。

composer.json

   要开始在你的项目中使用 Composer,你只需要一个composer.json文件。该文件包含了项目的依赖和其它的一些元数据。从该文件的后缀名可以知道,这是一个JSON格式的文件。

   下面通过一个最简单的示例项目来说明如何使用Composer。项目代码结构如下:

project/
    ├── src/
    │  ├── a.class.php
    │  ├── b.class.php

   接下来,我们要引入Composer。在项目的根目录建立一个composer.json文件。代码结构如下:

project/
    ├── src/
    │  ├── a.class.php
    │  ├── b.class.php
    ├── composer.json

   比如我们的项目现在需要依赖monolog/monolog这样的一个包,那接下来,我们就需要在composer.json中写入以下内容:

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

   可以看到,require需要一个包名称(例如monolog/monolog)映射到包版本(例如:1.0.*)的对象。而这里最重要的两个概念就是包名称和包版本。

    • 包名称
      包名称由供应商名称和其项目名称构成。通常容易产生相同的项目名称,而供应商名称的存在则很好的解决了命名冲突的问题。它允许两个不同的人创建同样名为json的库,而之后它们将被命名为igorw/jsonseldaek/json。 
    • 包版本
      包版本的门道就多了。比如在前面的例子中,我们引入的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&#124;>=1.2通过使用比较操作符可以指定有效的版本范围。有效的运算符:>>=<<=!=。我们可以定义多个范围,用逗号隔开,这将被视为一个逻辑AND处理。一个管道符号|将作为逻辑OR处理。AND的优先级高于OR。
    通配符1.0.*我们可以使用通配符*来指定一种模式。1.0.*>=1.0,<1.1是等效的。
    赋值运算符~1.2这对于遵循语义化版本号的项目非常有用。~1.2相当于>=1.2,<2.0
安装依赖包

   现在我们的示例项目已经有了composer.json文件,接下来我们就需要通过composer命令来安装依赖。安装依赖包步骤如下:

  • 切换到项目的根目录;
  • 执行composer install命令。

   接下来就是等待安装依赖包的过程,安装完成后,我们的项目目录将会变成这个样子:

project/
    ├── src/
    │  ├── a.class.php
    │  ├── b.class.php
    ├── vendor/
    ├── composer.json
    ├── composer.lock

   多了一个vendor文件夹和一个composer.lock文件。对于vendor目录,这是composer的一个惯例,把第三方的代码到一个指定的目录vendor。

锁文件

   在安装依赖后,Composer将把安装时确切的版本号列表写入composer.lock文件。这将锁定该项目的特定版本。

为了保证版本一致问题,请提交你应用程序的composer.lock(包括composer.json)到版本库中。

   这是非常重要的,因为install命令将会检查锁文件是否存在,如果存在,它将下载指定的版本(忽略composer.json文件中的定义)。

   这意味着,任何人建立项目都将下载与指定版本完全相同的依赖。我们的持续集成服务器、生产环境、你团队中的其他开发人员、每件事、每个人都使用相同的依赖,从而减轻潜在的错误对部署的影响。

   如果不存在composer.lock文件,Composer将读取composer.json并创建锁文件。同时,这也意味着如果我们的的项目依赖更新了新的版本,我们将不会获得任何更新。此时要更新依赖版本则需使用update命令。这将获取最新匹配的版本(根据composer.json文件)并将新版本更新进锁文件。

composer update
Packagist

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

   我们可以访问https://packagist.org来浏览和搜索我们需要的资源包。

自动加载

   归根到底,Composer是一个依赖管理的工具。我们使用Composer将对应的依赖包下载下来以后,如何在我们的项目中进行使用呢?对于这一点,Composer也想的很周到。

   已经存在的库,我们要把它加载到我们的项目中,对于库的自动加载信息,Composer生成了一个vendor/autoload.php文件。我们可以简单的引入这个文件,这样就会得到一个免费的自动加载支持。而这一切都是Composer来帮助我们完成的,我们只需要在应用层使用即可。例如:

require 'vendor/autoload.php';

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

$log = new MonologLogger('name');
$log->pushHandler(new MonologHandlerStreamHandler('app.log', MonologLogger::WARNING));
$log->addWarning('Foo');

免责声明:文章转载自《Composer教程之基础用法》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Python-类的继承sgdisk基本用法下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

IPI 通信(SMP)【转】

在MIPS架构下的IPI通信被关闭和中断后,IPIMIPS接口结构平台也将被发送_ smp_Ops{void;void;…}IPI通信是多个处理器之间的通信。send_ ipi_Single:一对一聊天send_ ipi_Mask:Mask posting,Mask表示Mask posting/*Octeon Tellanothercore of Lushi...

Cesium深入浅出之视频投影【转】

通常,我们使用矩形,因为视频形状是方形的。据怀疑,视频标签隐藏了这段关系。如果再次显示,视频将再次移动。此处使用VideoSynchronizer。它可以使视频元素与铯的模拟时钟同步。让我们看看它的构造函数:name type description optionsObject option子属性:name type默认值description用于驱动视频的...

移动端媒体查询的一些尺寸参考

device-width是设备实际的宽度,不会随着屏幕的旋转而改变,因此并不适合开发响应式网站。比如iphone5s的屏幕分辨率宽为640,由于retina显示策略,当scale设置为1的时候,对应的media中取到的width为320,当scale设置为0.5的时候,width为640,而device-width始终是320。总结1.device-widt...

HTML5表单之input 类型- Date Pickers(日期选择器)

HTML5有几种新的输入类型用于选择日期和时间:日期:选择日期、月份、年份月份:选择月份、年份星期:选择星期和年份时间:选择时间datetime local:选择时间、日期、月份和年份datetime:选择时间、,年示例1:日期示例2:月示例3:周示例4:时间˂inputtype=“time”name=“tart_time”value=“”//示例5:dat...

docker安装MySQL5.7示例!!坑,ERROR 1045 (28000): Access denied for user

处理mysql1045错误1.在/usr/local/mysql/conf中添加一个文件。d目录:mysql文件的内容是:[mysqld]skip-grant-tables2重新启动mysql:dockerstartmysql5.73进入docker:dockerexec-itmysql5.7bash4登录mysql:mysql-uroot-p5将root密...

批处理bat脚本自动配置java的jdk环境变量

前言每次更换计算机或重新安装系统时,都需要重新配置java系统路径。但我不想每次都检查配置方法,所以我编写了一个脚本来自动配置。脚本内容@echooff@echo步骤1:输入要设置的JAVA_HOME路径:set/pinput=“请输入JAVA_HOME路径:”@echo步骤2:设置JAVA_ HOME路径setxJAVA_HOME“%input%”/M@e...