关于composer.lock文件的作用介绍

发布时间 - 2019-12-16 00:00:00    点击率:

下面由composer教程栏目给大家介绍composer.lock文件的作用,希望对需要的朋友有所帮助!

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,

4. 下一个重要的版本:~符号最好的解释就是,~1.2就相当于>1.2,=1.2.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/*


# composer  # Python  # php  # json  # 命名空间  # require  # 对象  # 你可以  # 将会  # 这样子  # 最新版本  # 这将  # 自己的  # 这是  # 加载  # 几个  # 如果你 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel如何处理跨站请求伪造(CSRF)保护_Laravel表单安全机制与令牌校验  桂林网站制作公司有哪些,桂林马拉松怎么报名?  Laravel如何创建和注册中间件_Laravel中间件编写与应用流程  php增删改查怎么学_零基础入门php数据库操作必知基础【教程】  香港服务器部署网站为何提示未备案?  魔方云NAT建站如何实现端口转发?  SQL查询语句优化的实用方法总结  Laravel如何实现事件和监听器?(Event & Listener实战)  HTML透明颜色代码怎么让图片透明_给img元素加透明色的技巧【方法】  如何生成腾讯云建站专用兑换码?  C++用Dijkstra(迪杰斯特拉)算法求最短路径  详解Nginx + Tomcat 反向代理 如何在高效的在一台服务器部署多个站点  Laravel如何使用Blade组件和插槽?(Component代码示例)  武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?  Laravel怎么在Blade中安全地输出原始HTML内容  Python面向对象测试方法_mock解析【教程】  Laravel Octane如何提升性能_使用Laravel Octane加速你的应用  python中快速进行多个字符替换的方法小结  html5如何设置样式_HTML5样式设置方法与CSS应用技巧【教程】  详解vue.js组件化开发实践  jQuery中的100个技巧汇总  Laravel怎么实现前端Toast弹窗提示_Laravel Session闪存数据Flash传递给前端【方法】  HTML5空格在Angular项目里怎么处理_Angular中空格的渲染问题【详解】  如何快速生成橙子建站落地页链接?  Laravel如何安装Breeze扩展包_Laravel用户注册登录功能快速实现【流程】  C语言设计一个闪闪的圣诞树  Android中Textview和图片同行显示(文字超出用省略号,图片自动靠右边)  Laravel如何实现用户注册和登录?(Auth脚手架指南)  如何自定义建站之星网站的导航菜单样式?  网页制作模板网站推荐,网页设计海报之类的素材哪里好?  如何用JavaScript实现文本编辑器_光标和选区怎么处理  如何挑选优质建站一级代理提升网站排名?  公司网站制作价格怎么算,公司办个官网需要多少钱?  重庆市网站制作公司,重庆招聘网站哪个好?  jQuery validate插件功能与用法详解  bootstrap日历插件datetimepicker使用方法  Laravel怎么实现支付功能_Laravel集成支付宝微信支付  b2c电商网站制作流程,b2c水平综合的电商平台?  C++时间戳转换成日期时间的步骤和示例代码  如何在HTML表单中获取用户输入并用JavaScript动态控制复利计算循环  javascript中闭包概念与用法深入理解  在线教育网站制作平台,山西立德教育官网?  购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?  Laravel怎么生成二维码图片_Laravel集成Simple-QrCode扩展包与参数设置【实战】  香港服务器建站指南:免备案优势与SEO优化技巧全解析  如何在云主机上快速搭建多站点网站?  Win11关机界面怎么改_Win11自定义关机画面设置【工具】  轻松掌握MySQL函数中的last_insert_id()  消息称 OpenAI 正研发的神秘硬件设备或为智能笔,富士康代工  百度浏览器ai对话怎么关 百度浏览器ai聊天窗口隐藏