使用composer进行基于组件的开发

时间:2014-01-17 15:56:12

标签: php composer-php

假设我想写一个新的应用程序。

/workspace/exampleapp/
  .git
  src/
  vendor/
    app/
      component1/
        .git
        src/
        composer.json
      component2/
        .git
        src/
        composer.json
  composer.json

我有三个git存储库。他们没有遥控器。我还有三个composer.json个文件。

/workspace/app/composer.json

{
  "name": "app/app",
  "type": "project",
  "license": "MIT",
  "require": {
    "app/component1": "dev-master",
    "app/component2": "dev-master"
  },
  "autoload": {
    "psr-4": {"app\\": "src/"}
  }
}

/workspace/app/vendor/app/component1/composer.json

{
  "name": "app/component1",
  "type": "library",
  "license": "MIT",
  "autoload": {
    "psr-4": {"app\\": "src/"}
  }
}

/workspace/app/vendor/app/component2/composer.json

{
  "name": "app/component2",
  "type": "library",
  "license": "MIT",
  "autoload": {
    "psr-4": {"app\\": "src/"}
  }
}

如果我在项目根目录中运行composer update,我收到错误在任何版本中都找不到请求的包app / component1,包名中可能会出现拼写错误。

我需要更改哪些才能使其正常工作?有没有办法不将组件目录移出vendor目录或创建远程存储库?

谢谢!

1 个答案:

答案 0 :(得分:1)

我认为你患有the XY problem - 我会假装你真的问过“我如何使用具有以下要求的Composer设置项目?”

  • 能够在没有远程Git服务器的情况下工作,即能够在本地提交和推送。
  • 能够将组件的代码分别提交给主项目的提交。
  • 能够编辑存储库的供应商目录中的代码,并从这些目录中提交。

在这种情况下答案是,设置你的目录如下:

/workspace/app/
  composer.json
    src/

/workspace/components/
  component1/
    composer.json
    src/
  component2/
    src/
    composer.json

设置每个组件的作曲家文件,如下所示:

<强> /workspace/components/component1/composer.json

{
  "name": "app/component1",
  "type": "library",
  "license": "MIT",
  "autoload": {
    "psr-4": {"app\\": "src/"}
  }
}

告诉您的apper.json文件,您的应用程序将组件目录用作本地git存储库。

<强> /workspace/app/composer.json

{
  "name": "app/app",
  "type": "project",
  "license": "MIT",
  "require": {
    "app/component1": "dev-master",
    "app/component2": "dev-master"
  },
  "autoload": {
    "psr-4": {"app\\": "src/"}
  },
  "repositories": [
    {
        "type": "vcs",
        "url": "/workspace/components/component1"
    },
    {
        "type": "vcs",
        "url": "/workspace/components/component2"
    }
  ],
}

当你进行第一次“作曲家更新”时,你应该使用选项composer update --prefer-source来运行它。这将迫使作曲家为代码做一个git克隆,而不是只下载一个拉链球并将其解压缩。

(可能不需要添加--prefer-source,当从本地目录存储库获取时,默认情况下,作曲家可能会默认克隆。)

您现在可以编辑供应商目录中组件的代码,能够将其单独提交到应用程序代码,并且能够将其推送到{{1}处的“远程”git存储库}。