Установка Composer на самом деле не устанавливает библиотеку

Проблема

Это странно. Я просто добавил это в свой файл 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

но это явно уродливый и дорогостоящий прием (я добавил его в качестве предварительной ловушки при автоматическом развертывании посланник), и он работает каждый раз, но добавляет так много времени процессу автоматического развертывания.

Рекомендации

Вопрос

Как я могу запустить команду Composer, которая заставляет это работать (но я также должен избегать команды composer update, потому что я не хочу обновлять все свои библиотеки во время каждого развертывания, так как это приведет к непредсказуемым обновлениям моей базы кода)

Обновлять

Установка Composer на самом деле не устанавливает библиотеку

Я только что заметил, что эта библиотека в нашей версии поддерживает более старую версию 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):

Установка Composer на самом деле не устанавливает библиотеку

но моя версия PHP - 7.1.

Вы пробовали обновление композитора?

Jigs1212 31.03.2018 06:46

@ Jigs1212 Я знал, что кто-то предложит это, да, попробовал, и это сработало .. но я только что обновил свой вопрос, чтобы специально избегать использования обновления композитора b / c, у него есть нежелательные побочные эффекты

abbood 31.03.2018 06:47

в этом случае вы должны использовать composer require и это имя пакета в вашем случае composer require maatwebsite / excel

Jigs1212 31.03.2018 06:51
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
3
5 674
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

В вашем случае вы можете попробовать composer require and that package name, то есть

composer require maatwebsite/excel 
Ответ принят как подходящий

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, так что этот шаг уже испробован

abbood 31.03.2018 07:10
Или удалите composer.lock, а затем запустите установку композитора приведет к этой ошибке: 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/bootstra‌​p/autoload.php on line 17
abbood 31.03.2018 07:11

composer require - это не то же самое, что добавить его вручную и затем запустить установку, поскольку эти две команды делают разные вещи, когда присутствует файл composer.lock. Удалив файл composer.lock, вы, по сути, просто снова подключите всех поставщиков, если не кешируете.

Lawrence Cherone 31.03.2018 07:13

Другая ошибка связана с тем, что вы удалили папку vendor, что вам не нужно было делать, теперь вам нужно будет просто снова выполнить composer install (после удаления файла блокировки).

Lawrence Cherone 31.03.2018 07:14

Также похоже, что у вас есть атомарное управление версиями с envoyer, просто откатитесь, а затем выполните composer require maatwebsite/excel

Lawrence Cherone 31.03.2018 07:16

Я пробовал использовать composer require .., но ошибки все еще возникают (см. Обновление 2)

abbood 31.03.2018 07:45

Другая проблема, хорошо, что lib требует "illuminate/support": "^5.5", но laraval v5.3.31 устанавливает "illuminate/support": "v5.3.31". поскольку версии тесно связаны с laraval, вам нужно найти версию библиотеки, которая работает с v5.3.31, вы сможете отследить это на packagist.

Lawrence Cherone 31.03.2018 07:58

Вместо этого установите это: packagist.org/packages/maatwebsite/excel#2.1.27 его v2.1 вместо v3.0 версии этой библиотеки..a главный версия означает ломка, вам нужен laraval 5.5 для запуска 3.0 ..

Lawrence Cherone 31.03.2018 08:02

Я только что заметил ваше изображение в обновлении вопроса, вот что он говорит, у вас может быть php7.1, но у вас запущен laravel v5.3.31, поэтому вам нужна v2.1 библиотеки. После выпуска laravel v5.6 вся ломка начинается снова, что является одной из многих причин, по которым я не использую laraval.

Lawrence Cherone 31.03.2018 08:07

быстрый вопрос, как узнать, какая версия illuminate/support i фактически была установлена? эта штука не отображается (или любая другая библиотека подсветки, если на то пошло), когда я запускаю composer show ... как подробно описано в обновлении 2, я уже пытался установить версию 2.1, запустив maatwebsite/excel:2.1, но это вызвало все другие ошибки ... так что я ' мне придется разрешить эту зависимость освещения / поддержки вручную

abbood 31.03.2018 10:19
github.com/laravel/framework/blob/5.3/composer.json#L69self.version = версия laravel, поэтому v5.3.31
Lawrence Cherone 31.03.2018 10:21

Хорошо, чувак, я застрял ... как мне переопределить собственную версию библиотеки laravels? Я просто перечисляю это как требование в композиторе? Разве это не приведет к еще одному конфликту с laravel 5.3?

abbood 31.03.2018 10:32

Но этот конфликт является происходит в версии 2.1 .. У меня делать есть проблема

abbood 31.03.2018 10:35

Позвольте нам продолжить обсуждение в чате.

Lawrence Cherone 31.03.2018 10:37

Я до сих пор не совсем уверен, почему большую часть времени ... всякий раз, когда я добавляю новую библиотеку ... Я просто добавляю запись в файл composer.json, а затем запуск composer install устанавливает библиотеку (или выводит ошибку, когда библиотека есть проблемы) и обновляет composer.lock. только на этот раз это не сработало .. Я имел для композитора требует

abbood 31.03.2018 13:27

никогда, никогда, никогда не удаляйте composer.lock - если вы действительно не понимаете, что это означает, и не готовы принять последствия.

Вы получаете установку, просто позвонив:

composer require maatwebsite/excel:~2.1

Затем устанавливается версия 2.1.27.

Несколько слов о ваших сообщениях об ошибках. Там написано, что maatwebsite / excel v2.1.0 требует освещения / файловой системы 5.0.*|5.1.*|5.2.*. Этот пакет заменен на laravel в той же версии (вы можете «прочитать» это в composer.lock). Но вы используете laravel 5.3.31, поэтому существует конфликт версий. Но более новая версия от maatwebsite / excel совместима с другими версиями lighting / *.

Почему удалять composer.lock - плохая идея?

abbood 01.04.2018 08:15

Потому что это делает недействительным ваш сохраненный и, надеюсь, протестированный рабочий проект. После удаления журнала будет установлено много новых версий пакетов, и все придется протестировать повторно. В начале composer.lock есть ссылка для дальнейшего чтения

Norman M 02.04.2018 00:38

Другие вопросы по теме