composer.lock文件的作用


Posted in PHP onFebruary 03, 2016

Composer的基本使用

在项目中使用composer.json

在项目中使用composer,你需要有一个composer.json文件,此文件的作用主要用来声明包之间的相互关系和其他的一些元素标签。

require 关键字

第一件事情在composer.json就是使用require关键字了,你将告诉composer哪些包是你项目所需要的

{

    "require": {

        "monolog/monolog": "1.0.*"

    }

}

如你所见,require的对象将会映射包的名称( monolog/monolog)和包的版本是1.0.*

包的命名

基本上包的命名是 主名/项目名称( monolog/monolog),主名必须唯一,但是项目也就是我们的包的名称可以有相同的,例如: igorw/json,和seldaek/json

包的版本

我们需要使用monolog的版本是1.0.*,他的意思是只要版本是1.0分支即可,例如1.0.0,1.0.2或者1.0.99

版本定义的两种方式:

1. 标准的版本:定义保准的版本包文件,如:1.0.2
2. 一定范围的版本:使用比较符号来定义有效的版本的范围,有效的符号有>, >=, <,<=, !=
3. 通配符:特别的匹配符号*,例如1.0.*就相当于>=1.0,<1.1版本的即可
4. 下一个重要的版本:~符号最好的解释就是,~1.2就相当于>1.2,<2.0,但~1.2.3就相当于>=1.2.3,<1.3版本。  

安装包

在项目文件路径下运行

$ composer install

这样子他会自动下载monolog/monolog文件到你的vendor目录下面。

接下来需要说明一件事情就是

composer.lock - 锁定文件

在安装完所有需要的包之后,composer会生成一张标准的包版本的文件在composer.lock文件中。这将锁定所有包的版本。

使用composer.lock(当然是和composer.json一起)来控制你的项目的版本

这一点非常的重要,我们使用install命令来处理的时候,它首先会判断composer.lock文件是否存在,如果存在,将会下载相对应的版本(不会在于composer.json里面的配置),这意味着任何下载项目的人都将会得到一样的版本。

如果不存在composer.lock,composer将会通过composer.json来读取需要的包和相对的版本,然后创建composer.lock文件

这样子就可以在你的包有新的版本之后,你不会自动更新了,升级到新的版本,使用update命令即可,这样子就能获取最新版本的包并且也更新了你的composer.lock文件。

$ php composer.phar update
或者
$ composer update

Packagist(这应该就是composer,感觉有点像python的包,虽然没那么强大,呵呵,有了这种标准以后,以后大家开发网站绝对会很轻松,可以借鉴很多人的代码了,并且更加方便了!)
Packagist是composer的主要仓库,大家可以去看看,composer仓库的基础是包的源码,你可以随意的获取,Packagist的目的建成一个任何人都可以使用的仓库,这就意味着在你的文件中任意的require包了。

关于自动加载

为了方便的加载包文件,Composer自动生成了一个文件 vendor/autoload.php,你可以方便只有的使用它在任何你需要使用的地方
require 'vendor/autoload.php';

这意味着你可以非常非常方便的使用第三方代码了,假设你的项目需要使用monlog,你直接使用吧,他们都已经自动加载了的!

$log = new Monolog\Logger('name');

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

$log->addWarning('Foo');

当然你也可以在composer.json中加载自己的代码:

{

    "autoload": {

        "psr-0": {"Acme": "src/"}

    }

}

composer将会把psr-0注册为Acme的命名空间

你可以定义一个映射通过命名空间到文件目录,src目录是你的根目录,vendor是同一级别的目录,例如一个文件为:src/Acme/Foo.php就包含了Acme\Foo类

当你在增加autoload之后,你必须要重新install来生成vendor/autoload.php文件

在我们引用此文件的时候,将会返回一个autoloader类的实力,所以你可以把返回的值放入一个变量,然后在增加更多的命名空间,如果在开发环境下这是非常方便的,例如:

$loader = require 'vendor/autoload.php';

$loader->add('Acme\Test', __DIR__);

composer.lock文件的作用

install 命令从当前目录读取 composer.json 文件,处理了依赖关系,并把其安装到 vendor 目录下。

composer install

如果当前目录下存在 composer.lock 文件,它会从此文件读取依赖版本,而不是根据 composer.json 文件去获取依赖。这确保了该库的每个使用者都能得到相同的依赖版本。

如果没有 composer.lock 文件,composer 将在处理完依赖关系后创建它。

为了获取依赖的最新版本,并且升级 composer.lock 文件,你应该使用 update 命令。

composer update

这将解决项目的所有依赖,并将确切的版本号写入 composer.lock。

如果你只是想更新几个包,你可以像这样分别列出它们:

composer update vendor/package vendor/package2

你还可以使用通配符进行批量更新:

composer update vendor/*
PHP 相关文章推荐
PHP制作图型计数器的例子
Oct 09 PHP
在同一窗体中使用PHP来处理多个提交任务
May 08 PHP
PHP生成HTML静态页面实例代码
Aug 31 PHP
PHP脚本中include文件出错解决方法
Nov 20 PHP
查找mysql字段中固定字符串并替换的几个方法
Sep 23 PHP
php设计模式之命令模式使用示例
Mar 02 PHP
迁移PHP版本到PHP7
Feb 06 PHP
php in_array() 检查数组中是否存在某个值详解
Nov 23 PHP
PHP用正则匹配form表单中所有元素的类型和属性值实例代码
Feb 28 PHP
yii2.0整合阿里云oss的示例代码
Sep 19 PHP
PHP实现QQ、微信和支付宝三合一收款码实例代码
Feb 19 PHP
PHP单例模式数据库连接类与页面静态化实现方法
Mar 20 PHP
网页的分页下标生成代码(PHP后端方法)
Feb 03 #PHP
PHP Cookei记录用户历史浏览信息的代码
Feb 03 #PHP
Symfony学习十分钟入门经典教程
Feb 03 #PHP
php开发时容易忘记的一些技术细节
Feb 03 #PHP
PHP简单处理表单输入的特殊字符的方法
Feb 03 #PHP
PHP实现的构造sql语句类实例
Feb 03 #PHP
PHP快速生成各种信息提示框的方法
Feb 03 #PHP
You might like
PHP不用第三变量交换2个变量的值的解决方法
2013/06/02 PHP
codeigniter实现get分页的方法
2015/07/10 PHP
jquery photoFrame 图片边框美化显示插件
2010/06/28 Javascript
S2SH整合JQuery+Ajax实现登录验证功能实现代码
2013/01/30 Javascript
Jquery利用mouseenter和mouseleave实现鼠标经过弹出层且可以点击
2014/02/12 Javascript
jquery 取子节点及当前节点属性值的方法
2014/08/24 Javascript
angularjs的一些优化小技巧
2014/12/06 Javascript
简单谈谈jQuery(function(){})与(function(){})(jQuery)
2014/12/19 Javascript
JavaScript中调用函数的4种方式代码实例
2015/07/08 Javascript
基于Jquery和html5实现炫酷的3D焦点图动画
2016/03/02 Javascript
几种经典排序算法的JS实现方法
2016/03/25 Javascript
jQuery基本筛选选择器实例代码
2017/02/06 Javascript
jQuery插件echarts去掉垂直网格线用法示例
2017/03/03 Javascript
微信小程序实现日历效果
2018/12/28 Javascript
JavaScript怎样在删除前添加确认弹出框?
2019/05/27 Javascript
20个必会的JavaScript面试题(小结)
2019/07/02 Javascript
微信小程序实现底部弹出框
2020/11/18 Javascript
python动态性强类型用法实例
2015/05/09 Python
python 巧用正则寻找字符串中的特定字符的位置方法
2018/05/02 Python
解决Django数据库makemigrations有变化但是migrate时未变动问题
2018/05/30 Python
python删除文本中行数标签的方法
2018/05/31 Python
python 自定义对象的打印方法
2019/01/12 Python
10 行Python 代码实现 AI 目标检测技术【推荐】
2019/06/14 Python
face++与python实现人脸识别签到(考勤)功能
2019/08/28 Python
sklearn-SVC实现与类参数详解
2019/12/10 Python
python数据预处理 :样本分布不均的解决(过采样和欠采样)
2020/02/29 Python
html5 touch事件实现触屏页面上下滑动(二)
2016/03/10 HTML / CSS
COSETTE官网:奢华,每天
2020/03/22 全球购物
技术总监的工作职责
2013/11/13 职场文书
清明节演讲稿
2014/05/27 职场文书
幼儿园教师师德师风演讲稿:爱我所爱 无悔青春
2014/09/10 职场文书
副总经理岗位职责范本
2014/09/30 职场文书
党员个人剖析材料2014
2014/10/08 职场文书
Python离线安装openpyxl模块的步骤
2021/03/30 Python
浅谈sql_@SelectProvider及使用注意说明
2021/08/04 Java/Android
关于windows server 2012 DC 环境 重启后蓝屏代码:0xc00002e2的问题
2022/05/25 Servers