【问题标题】:Composer install doesn't actually install libraryComposer install 实际上并没有安装库
【发布时间】:2018-09-10 01:54:56
【问题描述】:

问题

这是一个奇怪的问题。我只是将它添加到我的 composer.json 文件中:

"maatwebsite/excel": "~2.1.0"

然而,当我运行 composer install 时,该库没有安装:

composer show | grep excel

什么都不返回。

所以每次我运行我的部署脚本时都会出现这个错误:

> php artisan clear-compiled
PHP Fatal error:  Uncaught Symfony\Component\Debug\Exception\FatalThrowableError: Class 'PHPExcel_Shared_Font' not found in /Users/Shared/dev/php/toters-api/config/excel.php:182
Stack trace:
#0 /Users/Shared/dev/php/toters-api/vendor/laravel/framework/src/Illuminate/Foundation/Bootstrap/LoadConfiguration.php(60): require()
#1 /Users/Shared/dev/php/toters-api/vendor/laravel/framework/src/Illuminate/Foundation/Bootstrap/LoadConfiguration.php(38): Illuminate\Foundation\Bootstrap\LoadConfiguration->loadConfigurationFiles(Object(Illuminate\Foundation\Application), Object(Illuminate\Config\Repository))
#2 /Users/Shared/dev/php/toters-api/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(203): Illuminate\Foundation\Bootstrap\LoadConfiguration->bootstrap(Object(Illuminate\Foundation\Application))
#3 /Users/Shared/dev/php/toters-api/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(267): Illuminate\Foundation\Application->bootstrapWith(Array)
#4 /Users/Shared/dev/php/toters-api/vendor/laravel/framew in /Users/Shared/dev/php/toters-api/config/excel.php on line 182

Fatal error: Uncaught Symfony\Component\Debug\Exception\FatalThrowableError: Class 'PHPExcel_Shared_Font' not found in /Users/Shared/dev/php/toters-api/config/excel.php on line 182

Symfony\Component\Debug\Exception\FatalThrowableError: Class 'PHPExcel_Shared_Font' not found in /Users/Shared/dev/php/toters-api/config/excel.php on line 182

这是一个预期错误,因为 Composer 忽略了我的 maatwebsite/excel 库!

解决方法

我使用这些步骤来强制它工作:

rm -rf vendor
rm composer.lock
composer install --no-scripts

但这显然是一个丑陋且昂贵的 hack(我已将其作为预挂钩添加到 envoyer 自动部署中),它每次都有效,但它为自动部署过程增加了很多时间。

参考文献

问题

如何运行 Composer 命令来强制它工作(但我还必须避免使用 composer update 命令,因为我不想在每次部署期间更新我的所有库,因为这会导致我的代码发生不可预测的更新基础)

更新

我刚刚注意到我们版本上的 this library 支持旧版本的 PHP - 这可能与它有关吗?

更新 2

运行 composer require maatwebsite/excel 返回以下内容:

composer require maatwebsite/excel
Using version ^3.0 for maatwebsite/excel
./composer.json has been updated
> php artisan clear-compiled
The compiled class file has been removed.
> php artisan ide-helper:generate
A new helper file was written to _ide_helper.php
Unexpected no document on Illuminate\Database\Eloquent\Model
Wrote expected docblock to /Users/Shared/dev/php/toters-api/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php
> php artisan ide-helper:models -N
Model information was written to _ide_helper_models.php
> php artisan optimize
Generating optimized class loader
The compiled class file has been removed.
Loading composer repositories with package information
Updating dependencies (including require-dev)
Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - Conclusion: remove laravel/framework v5.3.31
    - Conclusion: don't install laravel/framework v5.3.31
    - maatwebsite/excel 3.0.1 requires illuminate/support ^5.5 -> satisfiable by illuminate/support[v5.5.0, v5.5.16, v5.5.17, v5.5.2, v5.5.28, v5.5.33, v5.5.34, v5.5.35, v5.5.36, v5.5.37, v5.5.39, v5.5.40, v5.6.0, v5.6.1, v5.6.10, v5.6.11, v5.6.12, v5.6.13, v5.6.14, v5.6.15, v5.6.2, v5.6.3, v5.6.4, v5.6.5, v5.6.6, v5.6.7, v5.6.8, v5.6.9].
    - maatwebsite/excel 3.0.0 requires illuminate/support ^5.6 -> satisfiable by illuminate/support[v5.6.0, v5.6.1, v5.6.10, v5.6.11, v5.6.12, v5.6.13, v5.6.14, v5.6.15, v5.6.2, v5.6.3, v5.6.4, v5.6.5, v5.6.6, v5.6.7, v5.6.8, v5.6.9].
    - don't install illuminate/support v5.5.0|don't install laravel/framework v5.3.31
    - don't install illuminate/support v5.5.16|don't install laravel/framework v5.3.31
    - don't install illuminate/support v5.5.17|don't install laravel/framework v5.3.31
    - don't install illuminate/support v5.5.2|don't install laravel/framework v5.3.31
    - don't install illuminate/support v5.5.28|don't install laravel/framework v5.3.31
    - don't install illuminate/support v5.5.33|don't install laravel/framework v5.3.31
    - don't install illuminate/support v5.5.34|don't install laravel/framework v5.3.31
    - don't install illuminate/support v5.5.35|don't install laravel/framework v5.3.31
    - don't install illuminate/support v5.5.36|don't install laravel/framework v5.3.31
    - don't install illuminate/support v5.5.37|don't install laravel/framework v5.3.31
    - don't install illuminate/support v5.5.39|don't install laravel/framework v5.3.31
    - don't install illuminate/support v5.5.40|don't install laravel/framework v5.3.31
    - don't install illuminate/support v5.6.0|don't install laravel/framework v5.3.31
    - don't install illuminate/support v5.6.1|don't install laravel/framework v5.3.31
    - illuminate/support v5.6.10 conflicts with laravel/framework[v5.3.31].
    - illuminate/support v5.6.11 conflicts with laravel/framework[v5.3.31].
    - illuminate/support v5.6.12 conflicts with laravel/framework[v5.3.31].
    - illuminate/support v5.6.13 conflicts with laravel/framework[v5.3.31].
    - illuminate/support v5.6.14 conflicts with laravel/framework[v5.3.31].
    - illuminate/support v5.6.15 conflicts with laravel/framework[v5.3.31].
    - don't install illuminate/support v5.6.2|don't install laravel/framework v5.3.31
    - don't install illuminate/support v5.6.3|don't install laravel/framework v5.3.31
    - don't install illuminate/support v5.6.4|don't install laravel/framework v5.3.31
    - don't install illuminate/support v5.6.5|don't install laravel/framework v5.3.31
    - don't install illuminate/support v5.6.6|don't install laravel/framework v5.3.31
    - don't install illuminate/support v5.6.7|don't install laravel/framework v5.3.31
    - illuminate/support v5.6.8 conflicts with laravel/framework[v5.3.31].
    - illuminate/support v5.6.9 conflicts with laravel/framework[v5.3.31].
    - Installation request for laravel/framework (locked at v5.3.31, required as 5.3.*) -> satisfiable by laravel/framework[v5.3.31].
    - Installation request for maatwebsite/excel ^3.0 -> satisfiable by maatwebsite/excel[3.0.0, 3.0.1].


Installation failed, reverting ./composer.json to its original content.

这是意料之中的,因为最新版本的 maatwebsite/excel 需要 laravel 5.5+,

但是当我运行composer require maatwebsite/excel:2.1 时,我仍然得到一个错误:

./composer.json has been updated
> php artisan clear-compiled
The compiled class file has been removed.
> php artisan ide-helper:generate
A new helper file was written to _ide_helper.php
Tag Exists: @mixin \Eloquent in Illuminate\Database\Eloquent\Model
Tag Exists: @mixin \Illuminate\Database\Eloquent\Builder in Illuminate\Database\Eloquent\Model
Tag Exists: @mixin \Illuminate\Database\Query\Builder in Illuminate\Database\Eloquent\Model
> php artisan ide-helper:models -N
Model information was written to _ide_helper_models.php
> php artisan optimize
Generating optimized class loader
The compiled class file has been removed.
Loading composer repositories with package information
Updating dependencies (including require-dev)
Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - Installation request for maatwebsite/excel 2.1 -> satisfiable by maatwebsite/excel[v2.1.0].
    - Conclusion: remove laravel/framework v5.3.31
    - Conclusion: don't install laravel/framework v5.3.31
    - maatwebsite/excel v2.1.0 requires illuminate/filesystem 5.0.*|5.1.*|5.2.* -> satisfiable by illuminate/filesystem[v5.0.0, v5.0.22, v5.0.25, v5.0.26, v5.0.28, v5.0.33, v5.0.4, v5.1.1, v5.1.13, v5.1.16, v5.1.2, v5.1.20, v5.1.22, v5.1.25, v5.1.28, v5.1.30, v5.1.31, v5.1.41, v5.1.6, v5.1.8, v5.2.0, v5.2.19, v5.2.21, v5.2.24, v5.2.25, v5.2.26, v5.2.27, v5.2.28, v5.2.31, v5.2.32, v5.2.37, v5.2.43, v5.2.45, v5.2.6, v5.2.7].
    - don't install illuminate/filesystem v5.0.0|don't install laravel/framework v5.3.31
    - don't install illuminate/filesystem v5.0.22|don't install laravel/framework v5.3.31
    - don't install illuminate/filesystem v5.0.25|don't install laravel/framework v5.3.31
    - don't install illuminate/filesystem v5.0.26|don't install laravel/framework v5.3.31
    - don't install illuminate/filesystem v5.0.28|don't install laravel/framework v5.3.31
    - don't install illuminate/filesystem v5.0.33|don't install laravel/framework v5.3.31
    - don't install illuminate/filesystem v5.0.4|don't install laravel/framework v5.3.31
    - don't install illuminate/filesystem v5.1.1|don't install laravel/framework v5.3.31
    - don't install illuminate/filesystem v5.1.13|don't install laravel/framework v5.3.31
    - don't install illuminate/filesystem v5.1.16|don't install laravel/framework v5.3.31
    - don't install illuminate/filesystem v5.1.2|don't install laravel/framework v5.3.31
    - don't install illuminate/filesystem v5.1.20|don't install laravel/framework v5.3.31
    - don't install illuminate/filesystem v5.1.22|don't install laravel/framework v5.3.31
    - don't install illuminate/filesystem v5.1.25|don't install laravel/framework v5.3.31
    - don't install illuminate/filesystem v5.1.28|don't install laravel/framework v5.3.31
    - don't install illuminate/filesystem v5.1.30|don't install laravel/framework v5.3.31
    - don't install illuminate/filesystem v5.1.31|don't install laravel/framework v5.3.31
    - don't install illuminate/filesystem v5.1.41|don't install laravel/framework v5.3.31
    - don't install illuminate/filesystem v5.1.6|don't install laravel/framework v5.3.31
    - don't install illuminate/filesystem v5.1.8|don't install laravel/framework v5.3.31
    - don't install illuminate/filesystem v5.2.0|don't install laravel/framework v5.3.31
    - don't install illuminate/filesystem v5.2.19|don't install laravel/framework v5.3.31
    - don't install illuminate/filesystem v5.2.21|don't install laravel/framework v5.3.31
    - don't install illuminate/filesystem v5.2.24|don't install laravel/framework v5.3.31
    - don't install illuminate/filesystem v5.2.25|don't install laravel/framework v5.3.31
    - don't install illuminate/filesystem v5.2.26|don't install laravel/framework v5.3.31
    - don't install illuminate/filesystem v5.2.27|don't install laravel/framework v5.3.31
    - don't install illuminate/filesystem v5.2.28|don't install laravel/framework v5.3.31
    - don't install illuminate/filesystem v5.2.31|don't install laravel/framework v5.3.31
    - don't install illuminate/filesystem v5.2.32|don't install laravel/framework v5.3.31
    - don't install illuminate/filesystem v5.2.37|don't install laravel/framework v5.3.31
    - don't install illuminate/filesystem v5.2.43|don't install laravel/framework v5.3.31
    - don't install illuminate/filesystem v5.2.45|don't install laravel/framework v5.3.31
    - don't install illuminate/filesystem v5.2.6|don't install laravel/framework v5.3.31
    - don't install illuminate/filesystem v5.2.7|don't install laravel/framework v5.3.31
    - Installation request for laravel/framework (locked at v5.3.31, required as 5.3.*) -> satisfiable by laravel/framework[v5.3.31].


Installation failed, reverting ./composer.json to its original content.

这很奇怪,因为它应该支持 Laravel 5.3(我的 Laravel):

但我的 PHP 版本是 7.1。

【问题讨论】:

  • 你尝试过 composer update
  • @Jigs1212 我知道有人会建议,是的,试过了,它奏效了.. 但我刚刚更新了我的问题,专门避免使用 composer update b/c 它有不良副作用
  • 在这种情况下,你应该使用 composer require 并且在你的情况下,包名 composer require maatwebsite/excel

标签: php laravel composer-php envoyer.io


【解决方案1】:

composer install 不像 npm install。我很确定如果您像以前那样手动添加一个包,它会被忽略,因为composer.lock 已经存在。

  • 使用composer update 会奏效。
  • 或者通过composer require maatwebsite/excel添加包
  • 或者删除composer.lock然后运行composer install

编辑:

composer require maatwebsite/excel 将尝试安装该软件包的最新版本,但由于您使用的是laraval v5.3.31,您应该安装maatwebsite/excel ~2.1.0。第 3 版适用于 laraval ^5.5

  • composer require "maatwebsite/excel:~2.1.0"

【讨论】:

  • 运行composer quire maatwebsite/excel 将与将"maatwebsite/excel": "~2.1.0" 添加到composer.json 执行相同的操作,因此该步骤已经尝试过
  • 或者删除 composer.lock 然后运行 ​​composer install 会导致这个错误:Using global Composer installation. > php artisan clear-compiled Warning: require(/home/forge/default/envoyer/releases/20180331050930/bootstrap/../vendor/autoload.php): failed to open stream: No such file or directory in /home/forge/default/envoyer/releases/20180331050930/bootstrap/autoload.php on line 17
  • composer require 与手动添加它然后运行安装不同,因为当composer.lock 文件存在时,它们两个命令会做不同的事情。通过删除 composer.lock 文件,如果没有缓存,您实际上只是再次拉入所有供应商。
  • 另一个错误是因为你删除了你不需要做的供应商文件夹,你现在需要再次做composer install(在删除锁定文件之后)。
  • 看起来你在 envoyer 上进行了原子版本控制,只需回滚然后执行composer require maatwebsite/excel
【解决方案2】:

永远永远永远永远不要删除 composer.lock - 除非你真的明白这意味着什么并且愿意承担后果。

您只需调用以下命令即可安装:

composer require maatwebsite/excel:~2.1

然后安装版本 2.1.27。

就您的“错误”消息说几句话。那里说 maatwebsite/excel v2.1.0 需要Illumination/filesystem 5.0.*|5.1.*|5.2.*。这个包被相同版本的 laravel 取代(你可以在 composer.lock 中“阅读”这个)。 但是你使用的是 laravel 5.3.31 ergo 存在版本冲突。但是来自 maatwebsite/excel 的较新版本兼容更多版本的Illuminate/*。

【讨论】:

  • 为什么删除 composer.lock 是个坏主意?
  • 因为它会使您保存并希望经过测试的工作项目无效。删除日志后,将安装许多新的软件包版本,并且必须重新测试所有内容。 composer.lock 开头有一个链接供进一步阅读
【解决方案3】:

在您的情况下,您可以尝试composer require and that package name,即

composer require maatwebsite/excel 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-14
    • 2011-01-26
    • 1970-01-01
    • 2018-02-06
    • 1970-01-01
    • 2013-10-20
    • 2013-10-02
    • 1970-01-01
    相关资源
    最近更新 更多