【问题标题】:How can I safely add to a composer package?如何安全地添加到作曲家包?
【发布时间】:2013-07-10 01:41:06
【问题描述】:

我在我的项目中使用ComposerOmnipay,我想向包中添加一个新类(在我的情况下,它支持新的支付网关)。命名不与任何东西冲突,它遵循与同级文件夹相同的命名和结构约定。但是,当我运行 composer update 时,它会删除我的整个更改文件夹,即使它不需要。有没有办法告诉作曲家不要删除该目录?

【问题讨论】:

  • 你确定你的包json是正确的吗?指定工作 github url 等?
  • 我通过"require": {"omnipay/omnipay": "0.9.*"}包含它
  • composer.phar 更新输出说明了什么?
  • 除非有更新,否则什么都没有。包可以工作,我的添加也可以,但是当包有更新时,作曲家会删除我的添加
  • 但这就是更新的工作方式——整个包(来自供应商目录)被删除。您应该在单独的文件夹中使用命名空间类 - 这样一旦更新包,类就不会被删除。

标签: php composer-php omnipay


【解决方案1】:

/vendor 下的所有内容单独保留,不要更改那里的任何文件。您应该将库视为外部依赖项 - 不要将它们签入源代码管理或以任何方式更改它们。只需在您自己的代码中引用它们即可。

如果您需要自定义 composer 库,您可以在自己的代码中解决它(大多数 PHP 库支持依赖注入,这将允许您覆盖任何库的类),或者您可以分叉库在 github 上,然后在 composer.json 中引用您自己的 fork,或者提交 pull request,以便每个人都可以从中受益。

【讨论】:

  • 我可能最终会分叉它。似乎有点愚蠢,这种类型的扩展是不可能的。
  • 这并不愚蠢-您不应该修改外部库,否则您将来将无法更新它们。只需在您自己的代码中扩展各个类,这就是 OO 方式。
  • 问题是,它们不是外部的,我正在做的扩展类型即使在未来也是安全的
【解决方案2】:

据我所知,您不能添加到 Composer 包中,因为它是外部的,因此不受您的控制。您应该仅将包视为库,并将所有类添加到您自己的项目中,确保您需要的包仍然设置在您的 .json 文件中

【讨论】:

  • 我不认为答案:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-05-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-16
  • 2014-02-26
  • 1970-01-01
相关资源
最近更新 更多