【发布时间】: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 install 或 composer 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 update 和 composer install 运行顺利。 根据作曲家文档,困扰我的是,
提供
此包提供的包的映射。这主要是 对于通用接口的实现很有用。一个包可以 依赖于一些虚拟包,例如psr/记录器实现,任何 实现此记录器接口的库会将其列在 提供。然后可以在 Packagist.org 上找到实现者。
使用提供实际包的名称而不是虚拟包 一个意味着该包裹的代码也被运送,其中 案例替换通常是更好的选择。一个共同的约定 提供接口并依赖其他包的包 提供一个实现(例如 PSR 接口)是使用 虚拟包名称的 -implementation 后缀 对应接口包。
我没有提供这个包,我只是想要求它,但最终以不同的方式放置它。另外,我尝试过要求它,但错误仍然存在。 这是解决我问题的好方法还是我应该采取不同的做法?
我有什么需要担心的吗?
有人可以为我解释一下“提供”的语法吗?
【问题讨论】:
标签: php laravel composer-php