“ composer”程序包管理器如何工作?

时间:2019-08-16 03:48:51

标签: php package composer-php

我正在尝试安装“ Krumo

它说有两种安装方式,我尝试了第一种(下载PHP文件并将其包含到我的项目中),并且运行良好。

现在,我正在尝试第二种方式(使用作曲器)。

enter image description here

我看到第二个问题。

  • 在哪里运行此命令?
  • 是否等同于将“ class.krumo.php”文件和其他外观文件下载到当前文件夹?
  • 我仍然需要在PHP中包含文件吗?
  • 或者,也许通过运行此命令,krumo成为了我机器上PHP的内置功能(因此我可以在任何PHP文件上“开箱即用”使用它)?

我设法发现此install命令实际上不起作用(可能已过时),并发现我必须运行composer require kktsvetkov/krumo。我这样做了,得到了这个:

  

composer output

在我看来,它终于安装好了。在该文件夹下,仅添加了两个文件“ composer.lock”和“ composer.json”,找不到class.krumo.php文件,当然在测试PHP文件中调用krumo()会抛出错误call to undefined function krumo

我需要全面了解作曲家软件包的工作原理。

1 个答案:

答案 0 :(得分:2)

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

它如此递归地执行。因此,如果您的应用程序需要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,则会读取 lock 文件,以便他们安装与您完全相同的文件。

({require向项目的composer.json文件添加依赖项; install读取您的composer.jsoncomposer.lock文件并从那里建立一个项目;还有一个update命令,该命令将仅读取composer.json,下载与每个依赖项中的版本限制有关的最新可用软件包,并相应地更新`composer.lock)

此外,composer可以帮助autoloading,使开发人员更轻松,更快捷地实际使用已安装的库。

非常非常方便。不仅您不再需要为要使用的每个类添加require someclass.php;语句,而且还获得了不必读取这些文件直到实际需要它们的优点。 / p>

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

为此,在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's VarDump component.

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