【问题标题】:maintaining a composer.json for reuse between projects维护 composer.json 以便在项目之间重用
【发布时间】:2013-05-18 12:58:24
【问题描述】:

在我们公司,我们的目标是在所有新项目中使用 Symfony2。我们几乎总是向项目中添加一些额外的包,例如 FOSUserBundle 和 KnpMenuBundle。我们想维护一个 composer.json 文件,我们可以简单地将它复制到一个新的项目文件夹,运行composer.phar install(或创建项目,无论哪个可行)并让它安装 symfony2 以及我们想要的所有依赖项和额外的包使用。

换句话说,目标不是必须首先运行 php composer.phar create-project symfony/framework-standard-edition path/ 2.2.1,然后编辑 composer.json 以添加/删除包,最后运行 composer.phar update 来安装我们需要的包。

对如何实现这一点有任何想法吗?

【问题讨论】:

    标签: symfony composer-php


    【解决方案1】:

    您可以在 github 上 fork symfony-standard,修改 composer.json,更新 composer.lock,然后从您自己的副本中签出并运行 composer install

    【讨论】:

      【解决方案2】:

      您可以为您的 composer.json 创建一个 vcs(即 git)存储库,始终签入/提交您的所有更改。

      由于 composer 使用 json 并且没有对 cme​​ts json 的本机支持,因此拥有一个 composer.json 有点困难,您可以在其中评论/取消注释您定期安装的捆绑包。

      但是有两种方法可以实现这一目标。

      1) 使用 IgorW 的 composer-yaml 转换器,它可以将 composer.json 向后转换为 .yml 文件。

      2) Seldaek / Jordi Boggiano mentioned 在 composer.json 中实现 cmets 的另一种方式。

      {
          "_comment" : {
              "friendsofsymfony/rest-bundle" : "0.12.0",
              "_" : "_"
          },     
          "require": {
              "php": ">=5.3.3",
              "symfony/symfony": "*@dev",
      
               // ... more stuff here 
           },
      
           // more stuff here
      }
      

      通过这种方式,您只需将 注释中的行移动到 require 即可轻松地将包复制进出当前安装。 ( "_" : "_" 条目在 _comment 中的所有捆绑包之后都有一个尾随逗号,并且仍然具有有效的 JSON)。

      ...但这一切并不能为您提供开箱即用的工作项目。

      结论:

      大多数捆绑包都需要配置,并且至少所有捆绑包都必须在内核中注册才能工作。

      仅仅在你的存储库中有一个 composer.json 不会有帮助。

      您可以 fork symfony/symfony-standard ...在您的存储库中添加所有您想要的更改(注册包、更改 composer.json)并维护这个存储库。

      维护这个 repo 需要一些工作,因为分叉的 repo 不会使用最新的提交更新自身。 如果你想让你的 repo 保持最新,你必须合并来自 symfony/symfony-standard 的最新提交。

      但是创建一个自己的绝对是要走的路......只有一个 composer.json 你可以传递,以便在调用“composer install”之后拥有一个包含所有配置和捆绑包的工作项目(当前)不是可能。

      【讨论】:

      • 感谢您的详细解答。尽管这不是我所希望的答案,但我现在可以看到为我们的 Symfony 项目创建某种形式的自定义模板需要更多的思考。我们不想维护我们自己的 Symfony 分支,所以我现在倾向于使用 Phing 或 Ant 的自动化解决方案来编译不同的部分。
      猜你喜欢
      • 2021-09-24
      • 1970-01-01
      • 1970-01-01
      • 2015-06-19
      • 1970-01-01
      • 2011-02-04
      • 2012-02-20
      • 2010-12-13
      • 2011-10-26
      相关资源
      最近更新 更多