Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何管理依赖项库?_Php_Git_Composer Php_Sylius - Fatal编程技术网

Php 如何管理依赖项库?

Php 如何管理依赖项库?,php,git,composer-php,sylius,Php,Git,Composer Php,Sylius,如何管理依赖项库?我将我的项目分为一组库,因为这些库也用于其他几个项目中。开始时,我将它们作为Git repo,并使用Git子模块来管理它们。很快它就变成了一场噩梦。一旦我做了一些更改,我就必须在子模块中提交,这很乏味,需要大量的工作 我想知道Sylius是如何做到这一点的,他们将每个包作为Git和Packagist repo保存,但他们不使用Git或Composer来管理自己的包。最好的方法是使用Composer来管理依赖项并自动加载所有类 要实现这一点,第一步是准备好所有的组件,以便comp

如何管理依赖项库?我将我的项目分为一组库,因为这些库也用于其他几个项目中。开始时,我将它们作为Git repo,并使用Git子模块来管理它们。很快它就变成了一场噩梦。一旦我做了一些更改,我就必须在子模块中提交,这很乏味,需要大量的工作


我想知道Sylius是如何做到这一点的,他们将每个包作为Git和Packagist repo保存,但他们不使用Git或Composer来管理自己的包。

最好的方法是使用Composer来管理依赖项并自动加载所有类

要实现这一点,第一步是准备好所有的组件,以便composer,这样每个依赖项在根目录下都有自己的
composer.json
。基本配置可能如下所示:

{
  "name": "your/component-name",
  "description": "your description",
  "license": "proprietary",
  "authors": [
    {
      "name": "Your name",
      "email": "you@mail"
    }
  ],
  "autoload": {
    "psr-4": {
      "Your\\Complete\\Namespace": "src/"
    }
  },
  ... etc ...
}
  • name
    字段是用于在主项目中加载依赖项的名称
  • autoload
    部分非常重要,因为它将确定所有类的基本命名空间。在主项目中导入依赖项时,您将通过此命名空间访问组件类
当您的依赖项准备就绪时,您将准备主项目,以便通过composer加载它们。因此,基本上,这个项目的
composer.json
结构看起来与前面的完全相同,有更多的选项来加载依赖项

{
  "name": "your/project-name",
  "description": "your description",
  "license": "proprietary",
  "authors": [
    {
      "name": "Your name",
      "email": "you@mail"
    }
  ],
  "autoload": {
    "psr-4": {
      "Your\\Project\\Namespace": "src/"
    }
  },
  "require": {
    "your/dependency1-name" : "dev-master",
    "your/dependency2-name" : "dev-master",
   ....
  },
  "repositories": [
    {
      "type": "git",
      "url": "https://github.com/the-git-url-of-your-project1"
    },
    {
      "type": "git",
      "url": "https://github.com/the-git-url-of-your-project2"
    }
  ]
  ... etc ...
}
  • require
    部分的每一行都允许您配置要加载的所有依赖项(它是依赖项
    composer.json
    name
    部分),在哪个版本中(
    dev master
    或标签号,如果有的话)
  • repositories
    part:除非依赖项在packagist()上,否则必须添加依赖项的存储库(可能是github、bitbucket等)。它与您可以在repo的克隆部分找到的url相同
这是使用composer管理依赖关系所必须遵循的步骤。显而易见,您确实需要检查文档以使其适应您的需要,因为它只是对使用composer可以做什么的基本概述

一切就绪后,
composer安装
应将依赖项加载到
供应商
目录中,并加载命名空间中可用的所有类

您可以查看文档以了解更多选项:

这张有用的备忘单

我在注释(我无法添加注释)中看到,您希望将主应用程序中所做的所有更改提交到所有捆绑包

您可以查看composer的无api选项:

  "repositories": [
    {
      "type": "git",
      "no-api": true,
      "url": "https://github.com/the-git-url-of-your-project1"
    }
  ]
当您安装composer时,composer将执行git克隆


不使用composer的另一个解决方案是使用git子模块

您的库是否公开可用?因此,请使用composer(正如您标记问题一样)似乎是这个问题的重复,尽管这个问题被标记为c#,但问题是一样的。如果你有很多专有库,那么看看私有的composer存储库可能是值得的。有两个这样的存储库:@olibiaz,谢谢,composer无法解决这个问题,我们仍然必须始终提交更改,我认为最简单的方法应该是,不要使用git或composer来管理我们自己的库,我们将其保留在项目中,一个工具从库中提取composer.json,并将其作为git或composer存储库。@olibiaz,@Christiaan,我想知道Sylius和Drupal是如何做到这一点的,每个库都是git repo,但他们将其更改作为整个项目而不是单个repo提交。