博客
关于我
composer的使用
阅读量:362 次
发布时间:2019-03-04

本文共 2937 字,大约阅读时间需要 9 分钟。

                                                                 composer的使用

composer 是 PHP 的一个依赖管理工具,它并不是一个包管理器,它允许开发人员声明项目所依赖的代码库,它会在项目中安装他们。
目前php的主流框架都使用了composer,常见的有Laravel 、Symfony 、CodeIgniter 3、Yii 2 等等,composer 就是 PHP 框架的未来,有了它,让 CI 的路由和 Laravel 的 Eloquent ORM 协作就会变的非常简单。

第一步:

安装  php -r "readfile('https://getcomposer.org/installer');" | php
配置环境变量

第二步:

初始化工作目录
使用composer初始化工作目录,在项目的根目录命令行输入:
composer init
编写composer.json文件
{
    "name":"testor/composer_test"
    ,"require": {
        "提供者/项目名":"项目版本"
    }
}

我的代码如下:

{    "name": "admin/yizhayan",    "authors": [        {            "name": "qingting",            "email": "1417743769@qq.com"        }    ],    "require": {        "endroid/qr-code": "^3.9",        "topthink/think-queue" :"^1.1.4",        "topthink/think-mongo" :"^1.8.2",        "topthink/think-migration" :"^1.1.1",        "topthink/think-installer" :"^1.0.12",        "topthink/think-image" :"^1.0.7",        "topthink/think-helper" :"^1.0.6",        "topthink/think-captcha" :"^1.0.7",        "phpoffice/phpexcel" :"^1.8.2",        "phpmailer/phpmailer" :"^6.0.5",        "aliyuncs/oss-sdk-php" :"^2.3.0",        "dh2y/think-qrcode": "^2.0"    }}

第三步:

在composer.json文件所在目录命令行下执行如下命令:
php composer.phar install或composer install

其中,vendor文件夹存放了项目的依赖库,composer把安装时确切的版本号列表写入composer.lock文件用来锁定composer,这将锁定该项目的特定版本。

composer.lock文件

当项目根目录下已经生成composer.lock文件时,当执行命令composer intsall时composer只会下载composer.lock文件指定的版本,忽略 composer.json 文件中的定义,从而确保团队成员都使用相同的依赖包。

若package.json进行了修改需要更新依赖库和更新锁文件,可以执行以下命令:

 php composer.phar update或composer update

参考网址:

https://blog.csdn.net/zsl10/category_6312016.html
https://www.cnblogs.com/ivy-zheng/p/11498839.html
注:
composer install的话是根据composer.lock来的
composer update的话是根据composer.json来的

 

 

       补充:

 

首先要搞清楚的一件事情是,所有的依赖都定义在composer.json,手册中给出了一些。你可能已经注意到,在指定版本号的时候,我们并不一定要指明一个精确的版本。

那么就有可能发生这么一个情况,对于同一份composer.json,我们在不同时刻拉取到的依赖文件可能不同(因为composer会在满足条件的情况下去拉取最新的那份依赖),从而导致一些异常情况。

composer updatecomposer install正是为了解决这个问题而出现的。

 

1、当你执行composer update的时候,composer会去读取composer.json中指定的依赖,去分析他们,并且去拉取符合条件最新版本的依赖。

然后他会把所拉取到的依赖放入vendor目录下,并且把所有拉取的依赖的精确版本号写入composer.lock文件中。

 

2、composer install所执行的事情非常类似,只在第一步的时候有差别。当你本地如果已经存在一份composer.lock时,

它将会去读取你的composer.lock而非composer.json,并且以此为标准去下载依赖。

当你本地没有composer.lock的时候,它所做的事情和composer update其实并没有区别。

 

这意味着,只要你本地有一份composer.lock,你就可以保证无论过去了多久,你都能拉到相同的依赖。而如果你把它纳入你的项目的版本控制中,

那么你就可以确保你项目中的每一个人、每一台电脑,

不管什么系统,都能拉取到一模一样的依赖,以减少潜在的依赖对部署的影响。当然,请记得,你应该使用的命令是composer install

 

那什么时候该使用composer update呢?当你修改了你的依赖关系,不管是新增了依赖,还是修改了依赖的版本,又或者是删除了依赖,

这时候如果你执行composer install的时候,是不会有任何变更的,但你会得到一个警告信息

 Warning: The lock file is not up to date with the latest changes in composer.json. You may be getting outdated dependencies. Run update to update them.

 

有人可能会很好奇php是怎么知道我修改了依赖,或者composer.lock已经过期了。很简单,如果你打开composer.lock的话,

会发现其中有一个hash字段,这就是当时对应的那份依赖的哈希值。如果值不一致自然而然就知道发生了变更了。

这时候,你应该去通过composer update来更新下你的依赖了。

 

如果你不希望影响别的已经安装的依赖,仅仅更新你修改的部分,那你可以通过指定白名单来确定要更新的范围,

例如composer update monolog/monolog仅会更新monolog/monlog这个依赖,别的依赖哪怕有更新也会被忽略。

你可能感兴趣的文章
MyEcplise中SpringBoot怎样定制启动banner?
查看>>
MyPython
查看>>
MTD技术介绍
查看>>
MySQL
查看>>
MySQL
查看>>
mysql
查看>>
MTK Android 如何获取系统权限
查看>>
MySQL - 4种基本索引、聚簇索引和非聚索引、索引失效情况、SQL 优化
查看>>
MySQL - ERROR 1406
查看>>
mysql - 视图
查看>>
MySQL - 解读MySQL事务与锁机制
查看>>
MTTR、MTBF、MTTF的大白话理解
查看>>
mt_rand
查看>>
mysql /*! 50100 ... */ 条件编译
查看>>
mudbox卸载/完美解决安装失败/如何彻底卸载清除干净mudbox各种残留注册表和文件的方法...
查看>>
mysql 1264_关于mysql 出现 1264 Out of range value for column 错误的解决办法
查看>>
mysql 1593_Linux高可用(HA)之MySQL主从复制中出现1593错误码的低级错误
查看>>
mysql 5.6 修改端口_mysql5.6.24怎么修改端口号
查看>>
MySQL 8.0 恢复孤立文件每表ibd文件
查看>>
MySQL 8.0开始Group by不再排序
查看>>