composer的安装,使用

安装

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

这个命令使用 curl 下载 composer 的安装脚本,然后使用 php 进行安装,结果会在当前目录生成 composer.phar 文件。这个文件就是 composer 的二进制执行文件。
我们可以将 composer.phar 放到 /usr/local/bin/ 下,这样就可以在任何地方直接使用命令了

    mv composer.phar /usr/local/bin/composer
    chmod +x /usr/local/bin/composer

也可以按照官网给定的方式进行安装,参见 https://getcomposer.org/download/

常用的命令

1、install

composer install

首先判断是否存在composer.lock文件,如果存在,则直接根据composer.lock文件安装需要的包,如下图
这里写图片描述
如果不存在composer.lock文件,则根据composer.json文件进行安装,安装完成后生成composer.lock文件,如下图
这里写图片描述
注意:为了使每个人项目的环境都使用同样的依赖包,所以需要将composer.json和composer.lock文件纳入版本库,大家只需要根据composer.lock文件进行安装就可以了
2、require

composer require monglog/monglog        #安装某个包,这里安装的是mongolog
composer require monglog/monglog:1.2.3  #安装指定版本

composer require 安装完成某个库后会将信息写入到composer.json,并同时更新composer.lock
4、update

composer update                     #更新所有依赖包
composer update monglog/monglog     #更新指定的包

composer update 会读取composer.json中的定义的依赖规则,根据规则更新所有的库,并更新composer.lock文件。
注意:强烈建议不要使用composer update 更新所有的包,这样可能会导致无法预料的问题,应该更新具体的包
5、remove

composer remove monglog/monglog     #移除某个包

这个不用多讲,会修改composer.json和更新composer.lock
6、search

composer search monglog     #搜索依赖包

7、list

composer list   #列出可用的命令

会列出上面那些命令,如图(截取了一部分)
这里写图片描述

compose.lock文件(前面已经提到,可以不看)

前面已经提到 composer.lock 文件的作用。这个文件会列出项目中使用的所有 PHP 组件,以及组件的版本号。
如果 composer.lock 文件存在的话,在使用 install 命令安装的时候,composer 会下载这个文件中列出的具体组件(包括版本),然后安装相应的组件,版本与该文件中指定的版本相同,而不会去下载最新的版本。所以该文件应该被纳入到版本库,让不同的开发人员,不同的环境(开发、测试和线上)都使用相同的组件版本,避免潜在的风险(比如我遇到的坑,thinkphp5.2和thinkphp5.0的目录结构等都发生了很大的改变,导致在不同的环境下安装了不同的版本,项目无法运行)。

composer.json文件

下面是我的 thinkphp5.0 项目的 composer.json 文件,我会解释说明部分字段含义,更多字段说明可以去官网查看 http://docs.phpcomposer.com/04-schema.html

{
    "name": "topthink/think",
    "description": "the new thinkphp framework",
    "type": "project",
    "keywords": [
        "framework",
        "thinkphp",
        "ORM"
    ],
    "homepage": "http://thinkphp.cn/",
    "license": "Apache-2.0",
    "authors": [
        {
            "name": "liu21st",
            "email": "liu21st@gmail.com"
        }
    ],
     "repositories": {
        "packagist": {
            "type": "composer",
            "url": "https://packagist.phpcomposer.com"
        }
    },
    "require": {
        "php": ">=5.4.0",
        "topthink/framework": "5.0.*",
        "topthink/think-image": "^1.0",
        "topthink/think-mongo": "^1.0",
        "topthink/think-migration": "^1.0",
        "topthink/think-angular": "^1.0",
        "topthink/think-sae": "^1.0",
        "topthink/think-worker": "^1.0",
        "topthink/think-queue": "^1.0",
        "topthink/think-testing": "^1.0",
        "ezyang/htmlpurifier": "^4.9",
        "aliyuncs/oss-sdk-php": "^2.2",
        "jinchun/aliyun-mns": "^1.3"
    },
    "extra": {
        "think-path": "thinkphp"
    },
    "config": {
        "preferred-install": "dist"
    }
}

name:这是组件的厂商名和包名,使用 ‘/’ 隔开,这个属性的值会在 packagist 中显示。
description:不用说了,这个是描述。
type:包的安装类型,用来定义安装逻辑。常见的是两种类型是:1、library:这是默认的类型,它会简单的将文件复制到 vendor 目录。2、project:这表示当前包是一个项目,而不是一个库,这时会将文件直接放到当前目录下。
keywords:关键词
homepage:这个组件网站的 url。
require:这个组件列出组件自身依赖的组件。列出了每个依赖的厂商名和包名,以及版本号要求。

自动加载

目前为止,Composer一共支持4种自动加载方式
PSR-0
PSR-4
class-map
直接包含file
1、PSR-4
Composer推荐使用的一种方式,因为它更易使用并能带来更简洁的目录结构。在一个扩展的composer.json里是这样进行配置的:

{
    "autoload": {
        "psr-4": {
            "Foo\\": "src/",
        }
    }
}

key和value就定义出了namespace以及其对应的目录映射。按照PSR-4的规则,当试图自动加载”Foo\Bar\Baz”类的时候,会去寻找”src/Bar/Baz.php”这个文件,如果它存在则加载,要注意的是此时”Foo\”并不会出现在文件路径中。
而composer.json这样的配置会被Composer转换成namespace与文件目录的MAP形式,并存在vendor/composer/autoload_psr4.php文件中,所以如果你安装的某个扩展自动加载是PSR-4形式,你可以在autoload_psr4.php找到它的真实路径。
PSR-4自动加载器策略:命名空间前缀与文件目录对应。
2、PSR-0
这是一个已经过时的标准,那是在遥远的PHP5.2时代,你我都知道,PHP5.3之后才有了类似namespace这样的高级属性,所以PSR-0更多是考虑<=5.2时代的扩展,于是乎PSR组织用了一个伪namespace的做法。

{
    "autoload": {
        "psr-0": {
            "Foo\\": "src/",
        }
    }
}

PSR-0使用下划线组织类名。如

new Foo_Baz_Baz()

表示加载文件 src/Baz/Baz.php
3、class-map

{
    "autoload": {
        "classmap": ["src/", "lib/"]
    }
}

这个加载方式比较容易理解,当Composer开始安装扩展的时候,会根据composer.json里的这个 autoload 告诉的方式classmap,来遍历src、lib目录然后将里面的类文件和其路径一一对应,存放到vendor/composer/autoload_classmap.php内。
配置完成后,使用命令 composer dump-autoload 重新生成类名和文件的映射。
4、file
有了上面这些加载方式还不够么? 是的,还会有一些供全局使用的比如帮助等这样函数,那么好吧,我们就讲这些文件直接包含进来好了。

{
    "autoload": {
        "files": ["src/MyLibrary/functions.php"]
    }
}

参考:https://segmentfault.com/a/1190000008793953

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值