为了账号安全,请及时绑定邮箱和手机立即绑定

“作曲家”包管理器如何工作?

“作曲家”包管理器如何工作?

PHP
繁星淼淼 2021-11-26 15:24:16
我正在尝试安装“ Krumo ”它说有两种安装方式,我尝试了第一种(下载 PHP 文件并将其包含在我的项目中)并且运行良好。现在我正在尝试第二种方式(使用作曲家)。一看到它就冒出一堆问题。在哪里运行这个命令?是不是相当于把“class.krumo.php”文件等皮肤文件下载到当前文件夹?我还需要在我的 PHP 中包含该文件吗?或者,也许通过运行此命令,krumo 成为我机器上 PHP 的内置函数(因此我可以在任何 PHP 文件上“开箱即用”地使用它)?我设法发现这个install命令实际上不起作用(可能已经过时),并发现我必须运行composer require kktsvetkov/krumo. 我这样做并得到了这个:在我看来,它终于安装好了。文件夹下只添加了“composer.lock”和“composer.json”两个文件,找不到class.krumo.php文件,当然调用krumo()测试PHP文件会报错call to undefined function krumo。我需要一个关于 composer 包如何工作的大图。
查看完整描述

1 回答

?
慕桂英3389331

TA贡献2036条经验 获得超8个赞

首先,您需要了解什么是作曲家。这是一个“依赖管理器”。所以它管理您的应用程序依赖项,基本上是您的应用程序需要工作的库。

它递归地这样做。因此,如果您的应用程序需要NiceDependency工作,而NiceDependency反过来又需要AnotherNicePackage,它就会安装两者。它还处理冲突解决(当您的一个依赖项需要的东西与另一个依赖项要求的东西不兼容时)。

声明依赖项的文件是composer.json.

因此,当您跑步时composer require [some-vendor/some-package],幕后会发生一些事情。简化很多事情:

  • 如果您的composer.json文件不存在,它将创建它。

  • 它将尝试在中央存储库(packagist.org)中找到您的依赖

  • 如果找到,它将下载包并将其存储在vendor目录中。

  • 它将更新您的composer.json它以将您的依赖require项添加到密钥。

在此过程中,它将解析所有嵌套的依赖项并对其执行相同的操作。

完成后,它还会创建一个composer.lock文件。

这个“锁定”文件存储了对实际安装的所有包的所有引用的冻结快照。这是必要的,因为当您声明您的依赖项时,您可以定义一系列版本(例如“任何大于或等于 2.2 版;但低于 2.3 版”)。您composer.lock将存储实际安装的特定版本(例如“版本 2.2.4”)。

稍后,如果有人获取了您的项目文件并执行了composer install,则会读取锁定文件,以便他们安装与您安装的文件完全相同的文件。

require向您的项目的 composer.json 文件添加依赖项;install读取您的composer.jsoncomposer.lock文件并从那里设置项目;还有一个update只读命令,composer.json根据每个依赖项中的版本限制下载最新的可用包,然后更新`composer.lock 相应)

此外,composer 有助于自动加载,使开发人员在实际使用已安装库的过程中更轻松、更快捷。

自动加载非常方便。您不仅不再需要为require someclass.php;要使用的每个类添加语句,而且您还获得了在实际需要之前不必读取这些文件的优势。

因此,它不仅简化了这些新类的使用,还有助于使您的应用程序性能更好。

为此,在vendor目录autoload.php中创建了一个名为的文件。通常,您需要require将此文件作为在应用程序入口点上执行的第一件事。

例如,假设您有这样的结构:

- project root/

--- composer.json

--- composer.lock

--- vendor/

--- public/

----- index.php

您的index.php文件应为:


// public/index.php

<?php

require('../vendor/autoload.php');


这将允许您正常使用任何已安装的库。对于您要安装的工具:


// public/index.php

<?php

require('../vendor/autoload.php');


$a = [

    'foo' => 'bar',

    'baz' => [1, 2, 3],

    'xxx' = false

];


krumo($a);

附带说明一下,那个图书馆似乎很老了。我会尝试获得一些更新的东西。我推荐Symfony 的 VarDump 组件。

不,它不是一个特别友好的“新手”工具。它有助于处理很多事情,但它主要针对稍微更高级的用户,因为它有助于解决在入门/非常简单的项目中不太重要的问题。


查看完整回答
反对 回复 2021-11-26
  • 1 回答
  • 0 关注
  • 176 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信