composer学习

一,什么是composer?

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

二,安装

三,常用命令

list(展示命令列表)

help(查看帮助)

depends(查看某个包是否依赖其他)

install

1.如果composer.lock有对应记录就按照lock文件的版本号安装
2.composer.lock所有的依赖都将被安装。

update

1.让依赖根据composer.json更新,重新生成composer.lock文件。

require

将依赖添加或更新到composer.json文件中,不存在就创建(升高或降低版本)
实例:composer require monolog/monolog:2.0

remove

1.用于移除composer.json中的拓展包。
2.可以加多个包,批量删除

global

1.作用:安装全局CLI工具和composer插件
实例:composer global require friendsofphp/php-cs-fixer

search

1,在packagist.org里面搜索
2,--only-name 只通过名称来搜索
3,--type搜索特定的包类型

show

1.列出本地可用的包。
--outdated 列出有新版本可用的包
--all 列出所有仓库中可用的包
--installed列出所有已安装的包
--platform只列出平台依赖
--available只列出可用的包
--self列出根依赖信息
--name-only(N)列出包名
--path(P)列出包路径
--tree以树的形式列出你的依赖
--lasted列出已安装的包包以及他们的最新版本
--minor-only列出有小的语义化的
--direct 限制列出你的直系依赖
--stnct如果包过期,返回非0值
--format返回输出格式

browse

在浏览器打开项目地址(github)
例如:composer browse monolog/monolog

-H 打开首页
比如:composer browse topthink/thinkphp -H

-s 显示仓库地址
例如:composer browse topthink/thinkphp -s

outdated(显示已安装的包版本和最新版本)

validate(检查composer.json语法是否合理)

self-update

作用:升级composer.phar到最新版本,也可以指定
--rollback(-r) 回滚到上一个版本。 

config

对composer.json的参数查看和修改
--global(-g)$COMPOSER_HOME/config.json的全局设置
--unset:移除setting-key设置项

repository

修改仓库
语法:composer config repositories.foo vcs https://github.com/foo/bar[同时修改俩值]
实例:composer config repositories.tom vcs http://tom.com

create project

创建克隆一个项目,可以用composer create-project doctime/orm 2.2.*

dump

dump-autoload 生成自动加载目录

--optimize(-o) 将PSR-0/4自动加载转化为类映射,以获得更快的自动加载器,再次执行dump取消(composer dump-autoload)
composer dump-autoload -o 生成class-map映射

clear-cache

1,composer缓存目录清空
composer clear-cache

license

列出已万装每个包许可证的名称和版本
命令:composer license
其他参数:
--format 格式化输出:文本或json
--no-dev 从输出移除dev依赖

diagnose

自动检查一些常见的问题
Archive 命令会为给定版本生成一个zip/tar压缩包 ,也可以为整个项目生成一个压缩包
--file 命名压缩文件

check_platform_reqs

检查php和拓展版本是否满足已安装平台依赖的需求
命令:composer check-platform-reqs

四,composer的四种文件加载

1,psr-0和psr-4
1.推荐使用psr-4 添加类时,无需重新生成自动加载映射。
2.多个目录中加载相同前缀,可以指定为数组。
3.加载目录中所有命名空间的类,使用一个空前缀。

autoload{
    'psr-4':{
        'APP\\':'shop',
        'Name':['a','b'],
        '':"member" 
    }
}


psr-0
路径:基础路径+命名空间+下级目录+下划线分割的目录+最后一个下划线的目录+文件名
文件组成:根据组成依次建立
文件的命名空间:NS+二级目录
autoload{
    'psr-0':{
        'Foo\\':"",
        'hard\\':'src/'
    }
}

深入:
a.多个目录加载相同的前缀可以指定为数组
autoload{
    'psr-0':{
        'hard\\':['src/','app/']
    }
}
b.直接指定到类,全局命名空间只有一个类的包
autoload{
    'psr-0':{
        'Foo':"",
    }
}
c.全局备用前缀,加载目录中所有命名空间的类,可以使用一个空前缀。
autoload{
    'psr-0':{
        '':'src/'
    }
}

2.加载二级命名空间
autoload{
    'psr-4':{
        'Color\\Red\\':'style'
    }
}
1.psr-4对应的直接为目标地址,类里命名空间也对应类里相同二级命名空间。
2.psr-0:对应的为二级目录,需要增加对应的目录结构
3.psr-0下的带下划线的命名空间不会转义。

练习题
   "autoload": {
        "psr-4": {
            "Controller\\ceshi\\": [
                "src/Controller/",
                "src/Model/"
            ],
            "": [
                "App"
            ]
        },
        "psr-0": {
            "Hard\\": [
                "zero/",
                "zero1"
            ],
            "zhi": "",
            "": "all/",
            "one\\two\\": "source/"
        }
    }

2,classmap

路径:命名空间+类名
命名空间可以任意设置,但是不能跟其他的冲突。
下划线没有转义,非自动映射文件夹,每次新加文件都要dump

"autoload":{
    "classmap":["ceshi.php","ceshi/"]
}

3.files
引入某个文件,加载包中无法自动加载的php函数(相当于require)。
不能引入文件夹,可以带命名空间
"autoload":{
    "files":["ceshi.php"]
}
需要执行dump

五,composer.json结构

1,每个项目都是一个包,手动创建composer.json或者执行composer init
2,结合--quiet(-q) 不输出任何信息,快速生成空json文件。
3,结合部分参数,快速生成json文件
4, --name 拓展包名
    --description 拓展包简介
    --author 拓展包作者
    --type 拓展包类型
        library:默认值。它将复制文件到 vendor 目录。
        project:它表示这是个项目,而不是库。比如像 Symfony 标准版这种应用。
        metapackage:一个含有依赖的空包,能触发安装,但不包含文件,不会向文件系统写任何东西。
        composer-install:为其他的定制类型的包提供安装器的包。
        
    --homepage 拓展包主页
    --require 拓展包版本约束,编写格式foo/bar:1.0.1
    --require-dev 开发模式下约束,写法同 --require
    --stability 最低的稳定版本 minimum-stability的值
    --license 拓展包的授权协议
    --repository 提供一个或多个自定义仓库,

六,composer资源库

定义:一个资源库是一个包的来源。它是一个 packages/versions 的列表。Composer 将查看所有你定义的 repositories 以找到你项目需要的资源包。

使用自定义的包资源库

类型:

composer (一个 composer 类型的资源库,是一个简单的网络服务器(HTTP、FTP、SSH)上的 packages.json 文件,它包含一个 composer.json 对象的列表,有额外的 dist 和/或 source 信息。这个 packages.json 文件是用一个 PHP 流加载的。你可以使用 options 参数来设定额外的流信息。)

pear(从 pear 获取资源)

vcs   (从 git、svn 和 hg 取得资源)

package(如果你依赖于一个项目,它不提供任何对 composer 的支持,你就可以使用这种类型。你基本上就只需要内联一个 composer.json 对象)

实例:

{
    "repositories": [
        {
            "type": "composer",
            "url": "http://packages.example.com"
        },
        {
            "type": "composer",
            "url": "https://packages.example.com",
            "options": {
                "ssl": {
                    "verify_peer": "true"
                }
            }
        },
        {
            "type": "vcs",
            "url": "https://github.com/Seldaek/monolog"
        },
        {
            "type": "pear",
            "url": "http://pear2.php.net"
        },
        {
            "type": "package",
            "package": {
                "name": "smarty/smarty",
                "version": "3.1.7",
                "dist": {
                    "url": "http://www.smarty.net/files/Smarty-3.1.7.zip",
                    "type": "zip"
                },
                "source": {
                    "url": "http://smarty-php.googlecode.com/svn/",
                    "type": "svn",
                    "reference": "tags/Smarty_3_1_7/distribution/"
                }
            }
        }
    ]
}

注意: 顺序是非常重要的,当 Composer 查找资源包时,它会按照顺序进行。默认情况下 Packagist 是最后加入的,因此自定义设置将可以覆盖 Packagist 上的包。

特殊类型:path,一种以本地代码添加快捷方式引用为资源包类型。

实例:

"repositories": {
    "local": {
        "type": "path",
        "url": "../phpunit/demo"
    }
}

命令添加:

composer config repositories.ceshi path ../../junit-laravel:dev-master

 

七.别别窍

1.只更新单个包

composer update monolog/monolog

2.只更新composer.lock,不打算更新包

composer update nothing/--lock

3,快速创建一个composer.json

composer init --require=monolog/monolog:2.0 -n

4,提升加载速度(生成classmap映射)

composer dump-autoload -o

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值