Задать вопрос
@edvardpotter

Почему Composer удаляет мои файлы?

Есть проект на Silex который достался мне от одного разработчика, я его дорабатываю и понадобилось прикрутить языковую локализацию, имею такую структуру папки vendor
l2ZvQ0Vt5Oxb2J.png
загружаю репозиторий composer require symfony/translation, в итоге получаю следующее:

composer require symfony/translation
Using version ^3.2 for symfony/translation
./composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
  - Removing emberlabs/gravatarlib (dev-master)
  - Removing phpunit/phpunit (3.7.x-dev)
  - Removing phpunit/php-code-coverage (1.2.x-dev)
  - Removing phpunit/php-token-stream (dev-master)
  - Removing phpunit/phpunit-mock-objects (1.2.x-dev)
  - Removing doctrine/dbal (dev-master)
  - Removing doctrine/common (2.4.x-dev)
  - Removing doctrine/inflector (dev-master)
  - Removing doctrine/cache (dev-master)
  - Removing doctrine/collections (dev-master)
  - Removing doctrine/annotations (dev-master)
  - Removing doctrine/lexer (dev-master)
  - Removing symfony/validator (dev-master)
  - Removing symfony/serializer (dev-master)
  - Removing symfony/process (dev-master)
  - Removing symfony/monolog-bridge (dev-master)
  - Removing monolog/monolog (dev-master)
  - Removing symfony/finder (dev-master)
  - Removing symfony/css-selector (dev-master)
  - Removing symfony/browser-kit (dev-master)
  - Removing symfony/dom-crawler (dev-master)
  - Removing symfony/form (dev-master)
  - Removing symfony/options-resolver (dev-master)
  - Removing symfony/property-access (dev-master)
  - Removing symfony/locale (dev-master)
  - Removing symfony/intl (dev-master)
  - Removing symfony/icu (1.0.x-dev)
  - Removing symfony/security (dev-master)
  - Removing symfony/filesystem (dev-master)
  - Installing symfony/filesystem (v3.0.9)
    Loading from cache

  - Removing symfony/config (dev-master)
  - Installing symfony/config (v2.8.14)
    Loading from cache

  - Removing symfony/yaml (dev-master)
  - Installing symfony/yaml (v2.8.14)
    Loading from cache

  - Installing symfony/polyfill-mbstring (v1.3.0)
    Loading from cache

  - Removing symfony/translation (dev-master)
  - Installing symfony/translation (v3.2.0)
    Loading from cache

  - Removing swiftmailer/swiftmailer (dev-master)
  - Installing swiftmailer/swiftmailer (v5.4.4)
    Loading from cache

  - Removing symfony/stopwatch (dev-master)
  - Installing symfony/stopwatch (v2.8.14)
    Loading from cache

  - Removing symfony/twig-bridge (dev-master)
  - Installing symfony/twig-bridge (v2.8.14)
    Loading from cache

  - Removing symfony/routing (dev-master)
  - Installing symfony/routing (v3.0.9)
    Loading from cache

  - Removing symfony/http-foundation (dev-master)
  - Installing symfony/http-foundation (v3.0.9)
    Loading from cache

  - Removing symfony/event-dispatcher (dev-master)
  - Installing symfony/event-dispatcher (v3.0.9)
    Loading from cache     

  - Removing symfony/debug (dev-master)
  - Installing symfony/debug (v3.2.0)
    Loading from cache

  - Removing symfony/http-kernel (dev-master)
  - Installing symfony/http-kernel (v3.0.9)
    Loading from cache

  - Removing symfony/web-profiler-bundle (dev-master)
  - Installing symfony/web-profiler-bundle (v2.8.14)
    Loading from cache

  - Updating pimple/pimple (1.1.x-dev bc2fc12 => v1.1.1)
    Checking out 2019c145fe393923f3441b23f29bbdfaa5c58c4d

  - Installing silex/silex (v1.3.5)
    Loading from cache

Package kilte/silex-captcha is abandoned, you should avoid using it. Use amstaffix/silex-captcha instead.
Generating autoload files

При открытии приложения естественно возникает ошибка:

Fatal error: Uncaught exception 'ReflectionException' with message 'Class Symfony\Component\Security\Http\Firewall\ContextListener does not exist' in \vendor\silex\silex\src\Silex\Provider\SecurityServiceProvider.php:78 Stack trace: #0 \vendor\silex\silex\src\Silex\Provider\SecurityServiceProvider.php(78): ReflectionMethod->__construct('Symfony\\Compone...', '__construct') #1 \vendor\silex\silex\src\Silex\Application.php(178): Silex\Provider\SecurityServiceProvider->register(Object(Silex\Application)) #2 \src\app.php(138): Silex\Application->register(Object(Silex\Provider\SecurityServiceProvider), Array) #3 \site.ru\index.php(12): require('C:\\OpenServer\\g...') #4 {main} thrown in \vendor\silex\silex\src\Silex\Provider\SecurityServiceProvider.php on line 78


Нашел несколько решений этой проблемы

  1. Использовать --prefer-dist - не помогло.
  2. Добавить vendor в .gitignore - результат тот же.
  3. Удалить все .git из директории - безрезультатно.
  • Вопрос задан
  • 558 просмотров
Подписаться 1 Оценить Комментировать
Решения вопроса 1
@edvardpotter Автор вопроса
Вероятно данные пакеты были удалены из файла composer.json, но при этом присутствуют в файле ./vendor/composer/installed.json. Последний используется для хранения перечня установленных пакетов.

Сравнив эти 2 файла композер определит какие пакеты были удалены из composer.json "вручную" и удалит их из папки vendor.

Удалите из файла installed.json записи относящиеся к пакетам, которые хотите сохранить.
Источник
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@pudovMaxim
web-developer
Composer пытается установить последнюю версию symfony/translation, а для этого ему нужны подходящие версии компонентов symfony. Попробуйте указать версию для компонента symfony/translation, которая будет соответствовать остальным компонентам(вроде бы dev-master).

А если просто сделать composer update, то обновляется успешно?

И если не ошибаюсь, то использовать dev-master в продакшене настоятельно не рекомендуется.
Ответ написан
skobkin
@skobkin
Гентушник, разработчик на PHP и Symfony.
Вполне возможно, что эти пакеты были не зависимостями вашего приложения, а его зависимостей. Если они вам нужны - надо указать их явно в корневом composer.json.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы