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和ACCESS写聊天室(一)
Oct 09 PHP
使PHP自定义函数返回多个值
Nov 26 PHP
PHP逐行输出(ob_flush与flush的组合)
Feb 04 PHP
学习php分页代码实例
Oct 24 PHP
PHP变量内存分配问题记录整理
Nov 27 PHP
CodeIgniter中使用cookie的三种方式详解
Jul 18 PHP
php字符串按照单词进行反转的方法
Mar 14 PHP
Zend Framework校验器Zend_Validate用法详解
Dec 09 PHP
yii2 commands模式以及配置crontab定时任务的方法
Aug 19 PHP
PHP调用API接口实现天气查询功能的示例
Sep 21 PHP
laravel手动创建数组分页的实现代码
Jun 07 PHP
Ajax+Jpgraph实现的动态折线图功能示例
Feb 11 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
discuz authcode 经典php加密解密函数解析
2020/07/12 PHP
PHP入门之常量简介和系统常量
2014/05/12 PHP
PHP多文件上传类实例
2015/03/07 PHP
7个鲜为人知却非常实用的PHP函数
2015/07/01 PHP
thinkPHP多语言切换设置方法详解
2016/11/11 PHP
thinkphp3.2.0 setInc方法 源码全面解析
2018/01/29 PHP
csdn 博客中实现运行代码功能实现
2009/08/29 Javascript
分享一个用Mootools写的鼠标滑过进度条改变进度值的实现代码
2011/12/12 Javascript
jquery快捷动态绑定键盘事件的操作函数代码
2013/10/17 Javascript
JavaScript中的函数声明和函数表达式区别浅析
2015/03/27 Javascript
第五章之BootStrap 栅格系统
2016/04/25 Javascript
vue制作加载更多功能的正确打开方式
2016/10/12 Javascript
JavaScript浮点数及运算精度调整详解
2016/10/21 Javascript
JS中的作用域链
2017/03/01 Javascript
jQuery实现获取及设置CSS样式操作详解
2018/09/05 jQuery
详解Vue.js v-for不支持IE9的解决方法
2018/12/29 Javascript
nodejs微信开发之授权登录+获取用户信息
2019/03/17 NodeJs
JS获取本地地址及天气的方法实例小结
2019/05/10 Javascript
微信小程序引入模块中wxml、wxss、js的方法示例
2019/08/09 Javascript
微信小程序实现上传图片裁剪图片过程解析
2019/08/22 Javascript
[02:31]2018年度DOTA2最具人气选手-完美盛典
2018/12/16 DOTA
在Python的web框架中中编写日志列表的教程
2015/04/30 Python
Python cookbook(数据结构与算法)从任意长度的可迭代对象中分解元素操作示例
2018/02/13 Python
基于python3监控服务器状态进行邮件报警
2019/10/19 Python
使用pygame写一个古诗词填空通关游戏
2019/12/03 Python
python如何使用jt400.jar包代码实例
2019/12/20 Python
Python实现常见的几种加密算法(MD5,SHA-1,HMAC,DES/AES,RSA和ECC)
2020/05/09 Python
Python docutils文档编译过程方法解析
2020/06/23 Python
Flask中sqlalchemy模块的实例用法
2020/08/02 Python
基于Html5实现的react拖拽排序组件示例
2018/08/13 HTML / CSS
瑞典时尚耳机品牌:Urbanears
2017/07/26 全球购物
工业设计专业自荐书
2014/06/05 职场文书
道路运输企业安全生产责任书
2014/07/28 职场文书
违纪检讨书范文
2015/01/27 职场文书
爸爸的三轮车观后感
2015/06/16 职场文书
Vue通过懒加载提升页面响应速度
2021/05/10 Vue.js