【问题标题】:What does the composer "provide" do?作曲家“提供”了什么?
【发布时间】:2021-10-10 12:01:46
【问题描述】:

我正在使用 Laravel + VueJS 从工作中重新创建一个 POS 系统。我需要安装sped-nfe 包才能在工作系统上使用它。 该软件包需要许多其他软件包才能正常运行,例如 ext-curl、ext-soap、ext-json。

按照说明,我添加了

"nfephp-org/sped-nfe" : "^5.0"

到我的 composer.json。 当我运行 composer installcomposer update 时,出现以下错误:

Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - nfephp-org/sped-nfe[v5.0.100, ..., v5.0.122] require ext-soap * -> it is missing from your system. Install or enable PHP's soap extension.
    - Root composer.json requires nfephp-org/sped-nfe ^5.0 -> satisfiable by nfephp-org/sped-nfe[v5.0.100, ..., v5.0.122].

To enable extensions, verify that they are enabled in your .ini files:
    - C:\laragon\bin\php\php-7.4.19-Win32-vc15-x64\php.ini
You can also run `php --ini` inside terminal to see which files are used by PHP in CLI mode.

我使用的是 Windows,我无权修改我们的本地服务器或实际服务器,我在试图找到解决问题的方法时感到沮丧 - 几乎每个答案都会告诉我修改我的 php.ini 或使用 sudo apt-get 安装 curl - 我随意决定将以下几行添加到我的 composer.json

"provide": {
    "ext-curl":"*",
    "ext-soap":"*"
},

Et voilàcomposer updatecomposer install 运行顺利。 根据作曲家文档,困扰我的是,

提供

此包提供的包的映射。这主要是 对于通用接口的实现很有用。一个包可以 依赖于一些虚拟包,例如psr/记录器实现,任何 实现此记录器接口的库会将其列在 提供。然后可以在 Packagist.org 上找到实现者。

使用提供实际包的名称而不是虚拟包 一个意味着该包裹的代码也被运送,其中 案例替换通常是更好的选择。一个共同的约定 提供接口并依赖其他包的包 提供一个实现(例如 PSR 接口)是使用 虚拟包名称的 -implementation 后缀 对应接口包。

我没有提供这个包,我只是想要求它,但最终以不同的方式放置它。另外,我尝试过要求它,但错误仍然存​​在。 这是解决我问题的好方法还是我应该采取不同的做法?

我有什么需要担心的吗?

有人可以为我解释一下“提供”的语法吗?

【问题讨论】:

    标签: php laravel composer-php


    【解决方案1】:

    如果你在provide 部分添加一个包或一个PHP 扩展,你告诉作曲家你的包本身或外部系统设置“提供”了这个。依赖解析器对此很好。

    这不会进一步检查此依赖关系是否实际上正确解决了。 Composer 依赖于您的声明,即这不是谎言;)因此,如果您仅将其添加到 部分而没有 正确提供该包,则无法确定您的应用程序是否正常工作。

    在您的示例中:您要安装的包需要 SOAP 扩展。没有它就无法正常工作。如果你不能在你的服务器上安装那个扩展,你不应该使用这个包。

    【讨论】:

    • 非常感谢您的回答,我将避免使用它。我知道事情不可能这么简单。
    猜你喜欢
    • 2020-10-09
    • 2016-01-08
    • 2014-08-02
    • 1970-01-01
    • 2016-08-30
    • 2021-06-15
    • 2016-12-12
    • 1970-01-01
    • 2020-01-26
    相关资源
    最近更新 更多