【问题标题】:Is it possible to sandbox PHP dependencies installed with Composer? [duplicate]是否可以对使用 Composer 安装的 PHP 依赖项进行沙箱处理? [复制]
【发布时间】:2019-05-22 14:57:58
【问题描述】:

我正在开发 WordPress 插件。 WordPress 中的每个插件都是一个单独的软件,WordPress 中没有依赖管理,因此插件不知道其他插件及其依赖关系。 PHP 的问题在于使用 Composer 安装的所有依赖项都是全局的。

假设我的插件使用了一个流行的 PHP 库 - Symfony 或 Guzzle,比方说。更受欢迎的库 = 更大的冲突可能性。

有什么方法可以避免冲突吗?我在网上搜索 Composer 沙盒解决方案或类似的解决方案,但我没有找到任何东西 - 所以我担心该解决方案不存在。

另一方面,我可以想象一个不涉及任何火箭科学的解决方案。我可以想象一个预部署构建脚本,它将扫描/vendor 目录并使用自定义前缀为所有依赖项添加前缀。

是否有任何工具或技术可以在 PHP 中提供依赖隔离?

【问题讨论】:

  • @rob006 是的。在该主题中有我的问题的答案。我正在寻找的工具是 php-scoper。谢谢。
  • 我在引用的答案3rd party dependency conflict in developing Wordpress Plugin 中添加了更多的 PHP 前缀工具。即:humbug/php-scoper、Interfacelab/namespacer、coenjacobs/mozart、PHP-Prefixer。

标签: php wordpress composer-php


【解决方案1】:

每个库都有自己的命名空间,由作者定义。如果您碰巧在不同的插件上使用相同的库,您可能需要 fork 并更改要包含在插件中的库的命名空间,或者只使用 class_exists。

【讨论】:

  • 谢谢。 @rob006 已经回答了。我正在寻找的工具是 php-scoper。 class_exist 没有解决问题,因为类可能存在,但依赖的版本可能与我需要的不同。
【解决方案2】:

是否有任何工具或技术可以提供依赖关系 PHP 中的隔离?

我认为这可能是您问题的答案: How to get multiple vendor directories with composer?

【讨论】:

  • 没有。这不是一个解决方案。我想避免与其他插件加载的依赖项冲突 - 由其他人创作。我并不是要为我完全控制的网站寻求解决方案 - 在这种情况下,我只需使用 Composer 安装整个 WordPress 生态系统 - 使用像 Bedrock 这样的工具:roots.io/bedrock
猜你喜欢
  • 2015-07-14
  • 1970-01-01
  • 2019-08-12
  • 2015-01-24
  • 1970-01-01
  • 1970-01-01
  • 2017-06-28
  • 2014-10-24
  • 1970-01-01
相关资源
最近更新 更多