你如何管理你的依赖库?

时间:2016-05-11 02:14:02

标签: php git composer-php sylius

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

我想知道Sylius是如何做到的,他们将每个捆绑包保留为Git和Packagist仓库,但他们不使用Git或Composer来管理自己的捆绑包。

2 个答案:

答案 0 :(得分:1)

最好的方法是使用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部分的每一行将允许您配置要加载的所有依赖项(它的依赖项name的{​​{1}}部分)在哪个版本中{{1如果你有一些标签或标签号码。
  • composer.json部分:除非您的依赖关系在packagist(https://packagist.org/)上,否则您必须添加依赖关系的存储库(它可能是github,bitbucket等...)。您可以在回购的克隆部分找到相同的网址。

这是您使用composer管理依赖关系时必须遵循的步骤。显然,您确实需要检查文档以使其适应您的需求,因为它只是对使用composer可以做什么的基本概述。

当一切准备就绪时,dev-master应该将您的依赖项加载到repositories目录中,并且所有类都可以通过其命名空间使用。

您可以查看文档以获取更多选项:

https://getcomposer.org/doc/

这个有用的备忘单

http://composer.json.jolicode.com/

答案 1 :(得分:0)

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

你可以看一下作曲家的no-api选项:

  "repositories": [
    {
      "type": "git",
      "no-api": true,
      "url": "https://github.com/the-git-url-of-your-project1"
    }
  ]

当你进行作曲家安装时,作曲家会做一个git克隆

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