Вендор композитора / файлы bin не обнаруживаются в терминале Ubuntu

1

Вчера я только что установил Laravel с Behat на моем VM Ubuntu 15.10. Все работает нормально, выполнение команды $ vendor/bin/behat --init успешно создало features/ папку

но сегодня что-то странно, при запуске $ vendor/bin/behat его говорит vendor/bin/behat: line 1:../behat/behat/bin/behat: No such file or directory

Что внутри файла vendor/bin/behat? Эта первая единственная строка ../behat/behat/bin/behat

доступ к фактическому местоположению работает $ vendor/behat/behat/bin/behat что в основном означает, что file DOES exists

Обратите внимание, что проблема одинакова для файлов в vendor/bin таких как doctrine phpspec т.д.

Теги:
behat
composer-php

1 ответ

1
Лучший ответ

У вас проблемы с относительным пути. Если ваш текущий каталог содержит vendor/ и вы выполняете vendor/bin/behat, то ../behat/behat/bin/behat не существует, потому что он ../behat/behat/bin/behat один каталог из вашего текущего каталога, а не vendor/bin/. Например:

$ cd $HOME/project
$ vendor/bin/behat
vendor/bin/behat: line 1: ../behat/behat/bin/behat: No such file or directory

Этот относительный путь становится $HOME/project/behat/behat/bin/behat а не $HOME/project/vendor/behat/behat/bin/behat (обратите внимание, что vendor присутствует во втором пути)

Вы должны находиться внутри vendor/bin/ при выполнении behat:

$ cd $HOME/project/vendor/bin
$ behat
...

Тем не менее, я не вижу, что это проблема с последней установкой behat, строка # 1 - хорошо сформированная shebang. Я думаю, вы можете захотеть уничтожить установку своего vendor, обновить композитор и т.д. И переустановить Behat. Эти файлы не должны начинаться с относительных путей.

РЕДАКТИРОВАТЬ:

Согласно документам композитора, он создает символические ссылки на бинарные файлы пакетов, как показано в исходном коде. Вы можете проверить это, запустив ls -l vendor/bin (все символические ссылки будут иметь a -> указывающие на их путь назначения). Казалось бы, ваш оригинальный php composer.phar require... был испорчен с самого начала.

  • 0
    Да, на самом деле я решил проблему, удалив папку vendor и composer.lock, а затем снова выполнил установку composer. Интересно то, что файлы в vendor / bin / * не содержат относительный путь, а фактический код, на который они указывают. Ex. Поставщик / bin / behat имеет тот же контент, что и поставщик / behat / behat / bin / behat. Любая идея?
  • 0
    @Daskul - Согласно документации композитора, он создает символические ссылки на двоичные файлы пакета . Вы можете убедиться в этом, запустив ls -l vendor/bin (все символические ссылки будут иметь -> указывая на путь их назначения). Казалось бы, ваш оригинальный php composer.phar require ... был поврежден с самого начала.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню