Я столкнулся с небольшой проблемой здесь. Я пытаюсь использовать скрипт композитора для линковки моего проекта PHP. Пока что я создал файл композитора и ввел в него несколько сценариев. Мой фрагмент файла композитора выглядит примерно так:
"scripts": {
"document": "vendor/bin/apigen generate -s ./src -d ./docs",
"codecept": "vendor/bin/codecept",
"test": "vendor/bin/codecept run",
"lint": "vendor/bin/phpcs --standard=PSR2 src",
"bootstrap": "composer install && composer codecept bootstrap"}
Я уже определил зависимости, и она отлично работает на POSIX-совместимых машинах (ОС на базе MAC / Linux), но когда кто-то, использующий Windows, хочет использовать любой из сценариев, он просто не работает.
Проблема, с которой я сталкиваюсь, у меня есть /
как разделитель каталогов, но Windows понимает \
Я думал, что окна достаточно умны, чтобы автоматически конвертировать это.
Грязное решение, о котором я думаю, было бы иметь команду windows-lint, которая действительно очень раздражает. Я просто хотел знать, что делают другие люди, когда хотят работать на нескольких ОС.
Заранее спасибо!
Просто используйте скрипты без указания vendor/bin
путь, это будет сделано композитором автоматически, см. Заметка раздел в https://getcomposer.org/doc/articles/scripts.md#writing-custom-commands
"scripts": {
"document": "apigen generate -s ./src -d ./docs",
"codecept": "codecept",
"test": "codecept run",
"lint": "phpcs --standard=PSR2 src",
"bootstrap": "composer install && composer codecept bootstrap"}
Я думал о той же проблеме, может быть несколько решений.
Интерпретатор сценариев оболочки различается на разных платформах, и довольно сложно сделать что-то «универсальное».
Но вы можете использовать только чистый PHP. Документы композитора это довольно хорошо. Ваш PHP должен быть в состоянии легко адаптировать вещи для случая Windows или для случая POSIX.
Однако вам может не понравиться оборачивать команды вызова внешних программ и команд оболочки внутри PHP.
Например, вы бы запустили виртуальную машину Linux, определяемую бродяга файл, а затем запустите композитор через «vagrant ssh».
Плюсы:
Одна и та же оболочка для всех
Правильное определение среды Vagrant может упростить разработчикам множество локальных тестов, удалив известное «это работает на моей машине». Каждый разработчик имеет «ту же» локальную среду.
Минусы:
Некоторые первоначальные настройки (включая двустороннюю синхронизацию папки проекта с соответствующими разрешениями), множество примеров в Интернете могут помочь.
Для локального запуска ВМ требуется достаточно ОЗУ.
Не используйте стандартную оболочку для запуска composer. Есть много других вариантов, в том числе:
Cygwin (я бы не использовал его, если бы я мог избежать, однако)
git bash (что-то вроде MINGW32, которое можно легко установить с помощью клиента git, использование git не обязательно)
Я создал пакет composer, который преобразует косую черту в обратную косую черту, если выполняется в ОС Windows.
В ваш composer.json вам просто нужно добавить:
{
"require": {
"instituteweb/composer-scripts": "^1.0",
},
"scripts": {
"test": [
"\\InstituteWeb\\ComposerScripts\\ImprovedScriptExecution::apply",
"vendor/bin/whatever"]
}
}
Поэтому, когда вы выполняете composer run test
, это будет работать на Unix и ОС Windows.
Как это устроено:
применять метод в очереди сценариев, останавливает распространение исходной команды «test». Вместо этого он создает и выполняет новую команду с именем «_test» (prepends underscore), которая содержит исходные команды, только с преобразованными косыми чертами.
Просто команды после применять вызов метода затронут.
Ссылка на пакет: https://packagist.org/packages/instituteweb/composer-scripts