小孩子的作曲家

美好的一天

当我第一次与作曲家打交道时,我为自己草拟了一张小巧的备忘单,现在过了一会儿,我以略微修改的形式向公众展示了它。
该出版物与第一次接触PHP必不可少的软件包管理器的人有关。

因此,Composer是PHP的软件包管理器。

Composer的用途是什么,最简单的用法示例是什么?


这个项目为例。
简而言之:这是用于VK API的一组脚本
因此,对于这些脚本的操作,您需要几个库
库在composer.json文件中列出-使用composer时的密钥文件

示例composer.json:

图片

该项目使用5个库。 因此,如果开发人员决定将该项目发布在github上,那么他只需要将脚本文件夹放到萝卜中并撰写composer.json,它将描述该项目正常工作所必需的库。 显而易见,其简单性是:在萝卜中,您无需将所有必要的库随预告片一起拖到文件之后。 它占用更少的空间,更易于分发项目。

工作示例:

下载专案

图片

在scripts文件夹中直接是项目的脚本,为此需要这5个软件包。

我们开始安装软件包:

图片

安装后,将出现vendor文件夹,在其中添加已安装的软件包并形成autoload.php文件。

图片

我们将此文件连接到项目,就是这样-库已连接,您可以安全地使用它们。

图片

简单明了:您无需自己下载和连接库及其依赖项,composer会为您做所有事情。 整个捆绑包与一个单独的autoload.php文件连接
供应商中的所有软件包都将添加到自动加载器中。 为此,composer依赖于每个软件包都应具有的composer.json文件。 composer.json软件包的形成是软件包开发人员的任务;软件包的使用者只需要在composer.json项目中描述需要连接哪些软件包。

这是一个示例composer.json项目:

图片

这是一个示例composer.json包:

图片

在require部分中,注册了此程序包的依赖项-狂饮的http库,这对于getjump / vk库起作用是必需的。 在这种情况下 从软件包使用者的角度来看,各种软件包依赖项都不是我们的“关注点”,编写者将自己弄清楚这些依赖项。

程序包名称空间在autoload部分中注册。

图片

getjump \\ Vk \\-名称空间名称
src / getjump / Vk /-带有包类的文件所在的目录
在项目中使用此库:

图片

Core和Friends是根据PSR-4标准布置并注册在src文件夹中的库类。 同样,塑造包装的结构是包装创造者的工作。
作为包装的使用者,对于我们而言,注册我们的项目就足够了
包括'../vendor/autoload.php';
所有这些类和名称空间都可以正常工作。
在这种情况下,我们无需费心编写自动加载器。 运行install命令时,Composer会自行执行此操作。

安装方式


全局安装Composer


1)首先,您需要在环境变量路径中注册带有PHP解释器的目录的路径。
检查是否是这样:
php –版本

图片

如果结论是这样,那么您可以跳过此步骤
例如,Windows 7
系统->高级系统设置->高级->环境变量

接下来,我们将对path变量感兴趣:

图片

输入解释器的路径

图片
图片

*自古以来,我的计算机上就有xampp程序集,这里不需要程序集本身,但是它的解释器非常合适(PHP版本-5.6)。

2)重新启动终端。
创建目录并安装作曲家(我放在磁盘D上)
D:
cd /
麦克迪尔·本
光盘仓
php -r“ readfile('https://getcomposer.org/installer');” | 的PHP
回声PHP的 “%〜dp0composer.phar”%*> composer.bat

图片

3)将composer.bat的路径添加到环境变量路径,例如对于D:\ bin,它应该可以解决:

图片

另外可以添加到路径
D:\ Users \%userName%\ AppData \漫游\ Composer \供应商\ bin \
为了使使用通过Composer全局安装的工具更加方便。
(我的用户文件夹位于驱动器D上,并在C上为此创建了一个符号链接)。
就是这样,作曲家已安装并准备就绪。

另一个:在安装过程中,您可能会遇到错误
[RuntimeException]
必须将APPDATA或COMPOSER_HOME环境变量设置为composer才能正确运行
解决方案位于github.com/composer/composer/issues/2033
添加值为D的APPDATA变量:\ Users \ GSU \ AppData \ Roaming

图片

在本地安装Composer


可以选择在本地安装composer,但是在大多数情况下,不需要这样做。
但是,这里的安装更加简单。
因为 该程序不是全局安装的,您需要一个启动文件(composer mini-program),要加载它,我们编写命令:
php -r“ readfile('https://getcomposer.org/installer');” | 的PHP
现在composer.phar文件已经出现在项目目录中
一切都可以使用。
php composer.phar需要[软件包名称]

全局和本地安装之间的差异


本地和全局安装的命令运行方式不同:

例如:
本地:php composer.phar需要silex / silex〜1.1
全球范围内:作曲家需要silex / silex〜1.1

在本地安装时,每次都需要将安装文件下载到当前项目文件夹中
php -r“ readfile('https://getcomposer.org/installer');” | 的PHP

在全局安装中,不需要此文件。 Composer从任何当前目录启动。

队伍


install-安装composer.json中规定的软件包
更新-更新程序包
dumpautoload-重建自动装带器
需要somepackage / somepackage:someversion-添加新软件包(默认情况下,软件包是从官方存储库安装的)。 在安装期间,该软件包写在composer.json中
update --lock-更新composer.lock锁定文件
config --global cache-files-maxsize“ 2048MiB”-更改配置参数的示例
--profile-在任何命令中添加此参数将显示执行时间和已用内存量
--verbose-有关正在执行的操作的详细信息
show --installed-已安装软件包的列表,其中包含每个软件包的描述
show --platform-PHP信息
--dry-run-命令执行排练。 可以添加它以安装和更新命令。 模拟命令的执行而无需直接执行。 为了检查软件包和依赖项的安装是否成功是必要的。
移除-移除包装。 与需求完全相反

语法composer.json


软件包命名和软件包描述选项

软件包名称由两部分组成,中间用斜杠分隔:供应商名称和库名称。

图片

如果该软件包是根据PSR-4标准设计的,但未在packagist.org上发布,而是在github上发布,则除了该软件包的版本以外,您需要为此软件包注册一个分支和一个存储库:

图片

连接位于github上的库的示例,但它不是PSR-4标准所限制的,而是一堆包含类和函数的普通文件。

样本视图:

图片

Pqr / superlib-这是相同的“错误”库。

在存储库部分中,我们为此编写了一个结构

图片

关键是自动加载部分,在这里我们使用类和函数指定所需的文件。
库结构:

图片

文件内容:

图片
图片

因此,在项目中,对getCurrentTime()的调用将类似于以下内容:
$ timer = new pqr \ superlib \ TimerClass;
echo $计时器-> getCurrentTime();

版本控制


当指定有效的软件包版本时,可以使用精确的对应关系(1.2.3),带有比较运算符的范围(<1.2.3),这些运算符的组合(> 1.2.3 <1.3),“最后可用”(1.2。*)和Tilde符号(〜1.2.3)和插入标记(^ 1.2.3)。
代字号(〜1.2.3)会包括所有版本,最高为1.3(不包括在内),因为在语义版本控制中,这是引入新功能的时刻。 在这种情况下,将获得最后一个稳定的次要版本。 即 只有最后一位数字会更改-1.2.5、1.2.8等。

插入符号(^ 1.2.3)的字面意思是“仅当心关键更改”,并将包括2.0版以下的版本。 关于语义版本控制,主要版本的更改是对项目进行关键更改的时刻,因此1.3、1.4和1.9版本适用,而2.0版本已不存在。
即 仅第一位数字不变。

Tilda:〜1.2.3是指定版本的最常见和最安全的方法。

文件composer.lock


composer.lock文件保存已安装依赖关系及其版本的当前列表。 因此,在依赖性版本已经更新时(更新命令),将克隆您的项目的其他人将收到相同的版本。 这样,您可以确保接收项目的每个人都具有与您在开发过程中使用的批处理环境相同的批处理环境,并有助于避免由于版本升级而产生的错误。

每次执行更新命令时,都会在composer.lock中注册更新软件包的版本。 在版本控制系统下驱动此文件,并且在新服务器上安装软件包时,将交付此文件中注册的软件包版本。 执行install命令时,composer将主要依赖composer.lock。 因此,就版本而言,相同的软件包环境将确保安装在不同的服务器上。

另外,composer.lock文件包含composer.json文件的哈希。
并且,如果json文件已被编辑,则作曲家会警告您锁定文件与json文件不匹配。

在这种情况下,您需要运行composer update --lock命令,该命令将更新composer.lock。

图片
图片
图片
图片

在使用composer.lock的上下文中安装和更新之间的区别


composer install命令执行以下操作:

检查composer.lock是否存在:

-如果不是,则解决依赖关系并创建它
-如果存在composer.lock,则安装其中指定的版本

作曲家更新命令:

-检查composer.json
-根据此文件中指定的版本确定最新版本
-安装最新版本
-根据已安装的内容更新composer.lock

从项目创建者的角度来看使用示例


有一个没有安装软件包的项目

图片

放一些图书馆

图片
图片

我们已经使用包信息形成了composer.json

图片

我们可以对其进行补充,并使用此文件分发项目。

图片

另一个用户下载了我们的项目,执行了安装,所有必需的软件包都已部署到他的项目中。

图片

从包创建者的角度来看示例用法


例如,我使用一种方法来创建一个类,该方法将显示当前页面的URL。

图片

该类被设计为一个包,并上传到github。

图片
图片

由composer.json编译

图片

我在办公室注册。 存储库并添加一个包,指示指向其所在存储库的链接

图片

所有套餐已添加

图片
图片

我检查了包装的功能

图片

包裹已交付,这是我们的课程:

图片

调用方法

图片

一切都很好。

图片

作曲家和PhpStorm


初始化

图片
图片
图片
图片

配置Composer软件包编辑功能

图片

如果设置了该选项,那么在供应商/ * / *中获取和编辑文件将不是那么容易。

套件安装

图片
图片
图片
图片
图片

细微之处,微妙之处,困难处境


错误:警告:锁文件不是最新的composer.json更改。 您可能会过时的依赖关系。 运行更新以更新它们。 无需安装或更新
解决方案:作曲家更新--lock

安装大量库后,更新需要很长时间
Composer会检查软件包的所有依赖关系,如果有很多软件包,则将花费很长时间。
解决方案:如果您只需要更新一个库,则显式指定它:

作曲家更新包/名称

您还可以添加“ --prefer-dist”参数(尽管从理论上讲,默认情况下应将其打开),然后作曲家将尝试从zip归档文件安装库,而不是克隆存储库。

无法下载“ ****。Json”文件:无法打开流:HTTP请求失败!
尽管Composer需要通过HTTPS,但它仍尝试通过HTTP拉取数据包
解决方案:composer config --global repo.packagist composer packagist.org

根据您的最低稳定性设置,该软件包没有足够稳定的版本
请参阅以获取更多详细信息。
该软件包没有稳定版本,并且在配置中不允许安装dev版本。
解决方案:或者设置参数“ minimum-stability”:“ dev”和“ prefer-stable”:true以放置稳定版本,或者-如果这是您自己的软件包,请使用该版本创建标签(github上自述文件中的稳定标签应显示版本)

发展历史和主要变化


-首次发布时间为2012年3月1日,整个2012年工具正在积极开发中
-2014年1月-基于PSR-4实施了自动加载
-2016年3月-测试版(1.0.0-beta1)发布了。 添加了show --tree命令以在树中显示已安装的软件包,为什么-显示为什么无法安装软件包,更新--interactive-允许您选择要更新的软件包以及许多其他改进和修补程序。
-2016年4月4日-推出了Composer的第一个稳定版本-1.0.0

2014年12月-对Composer存储库的关键承诺之一
github.com/composer/composer/commit/ac676f47f7bbc619678a29deae097b6b0710b799
变更的本质-禁用垃圾收集器

图片
图片

habrastorage.org/getpro/habr/comment_images/db3/59a/972/db359a972df6730e52f292b5c52095b8.gif

参考文献


场外:getcomposer.org
官方软件包存储库:packagist.org
Composer资料库: github.com/composer/composer
伟大的作曲家教程daylerees.com/composer-primer
命令列表和composer.json文件的详细示例: composer.json.jolicode.com

Source: https://habr.com/ru/post/zh-CN439200/


All Articles