提问者:小点点

Laravel 5.1软件包开发-加载开发中的软件包依赖关系


嗨,我正在尝试用Laravel 5.1开发一个软件包。多亏了这里的帮助,我已经把基本知识准备好了。

我当前的问题是如何在开发包时加载包的依赖项。

在包composer.json中,我添加了依赖项,并将其安装在包开发文件夹中的供应商文件夹中。这不是框架的根供应商文件夹。

这是我需要的包composer.json部分:

"require": {
"illuminate/support": "~5.1",
"php" : ">=5.3.0",
"google/apiclient": "dev-master"
},

因为它们不是主自动加载过程的一部分,所以确保从开发文件夹中正确加载包的依赖项的最佳方法是什么?如何包括自动加载?我担心,如果我将它们引用到它们当前的位置/名称空间,那么在以后作为包安装到另一个应用程序中时,它们将被破坏。

在我的代码中,我有以下内容:

$client = new \Google_Client($config);

这就产生了错误:

Class 'Google_Client' not found

我可以通过将此依赖项添加到主编写器来解决这个问题。json,但不要认为这是保持包开发独立的正确方法(如果有意义的话)

当我在L4发展的时候。2有一个工作台负责装载,这当然不再是L5的特点。1.

感谢您的帮助和最佳实践


共1个答案

匿名用户

因为它们不是主自动加载过程的一部分

我认为您误解了如何管理composer依赖关系。在你的主要写作中。json文件列出一个依赖项,composer会将它添加到主自动加载进程以及它们的所有依赖项,以及它们的依赖项的依赖项,等等。

您不必担心依赖项存储在哪里,也不必担心Composer将如何加载它们。Composer会自动将它们添加到自动加载文件中,您所要做的就是确保需要Composer自动加载文件。一旦您需要composer自动加载文件,composer加载的所有类和函数都将可用。如果您需要composer自动加载文件,那么要使用任何已安装包中的类,您所要做的就是确保使用正确的名称空间对它们进行寻址。Composer非常聪明,知道所有类存储在哪里以及如何加载它们(这就是psr-0、psr-4等的用途)。

因此,如果您正在开发一个Composer包,让我们称之为“A”,并且您将包“C”列为包“A”的依赖项之一,Composer将为您将其添加到自动加载文件中。如果您使用另一个包,比如说Laravel,它依赖于您的包“A”,那么包“C”也将在Laravel中可用,因为它是“A”的依赖。

如果这是你的composer.json文件

{
    "name": "foo/bar",
    "require": {
        "google/apiclient": "1.0.*"
    }
}

这个代码会起作用的

require_once __DIR__ . '/vendor/autoload.php';
$client = new Google_Client();
$youtube = new Google_Service_YouTube($client);

注意,我需要作曲家自动加载文件,这似乎是你的问题。当您使用Laravel时,它会为您添加该文件。