Я сталкивался с разработчиками в социальных сетях и на различных работах, у которых были проблемы с настройкой своих редакторов, когда в них задействован Docker. В этой статье я расскажу о PhpStorm и о том, как правильно использовать его с Docker. При использовании Docker обычно лучше запускать различные скрипты и двоичные файлы из контейнера Docker, а не локально. К ним относятся линтеры, средства форматирования и даже тесты.
В этой статье я буду использовать приложение Laravel с Laravel Sail в качестве примера для настройки PhpStorm.
Установка
Laravel Sail Используйте следующую команду, чтобы запустить новое приложение Laravel с помощью Sail:
curl -s "https://laravel.build/phpstorm-docker" | bash
Это может занять несколько минут. Как только это будет сделано, запустите sail up
приложение.
/vendor/bin/sail up
Подсказка: Добавьте относительную папку в PATH, чтобы разрешить вызов двоичных файлов из Composer Перейдите в «Настройки» > PHP > Composer и Node, используя имя двоичного файла, а не весь путь. В вашем
.zshrc
или добавьте следующее:export PATH="./vendor/bin:$PATH" export PATH="./node_modules/.bin:$PATH"
Тогда, вместо вызова
/vendor/bin/sail up
, теперь можно вызватьsail up
!
.bashrc
Установите интерпретатор
PHP Storm Откройте окно настроек и перейдите в раздел PHP. Затем щелкните рядом ...
с полем Интерпретатор CLI.
Возможно, у вас настроен локальный интерпретатор PHP. Теперь вам нужно добавить интерпретатор Docker. Используйте значок +
в левом верхнем углу и выберите «Из Docker, Vagrant, VM, WSL, Remote...» выбор.
В следующем всплывающем окне выберите опцию «Docker Compose». Отобразится список доступных служб, включенных в файл.docker-compose.yml
laravel.test
Выберите сервис, который является PHP-контейнером для Sail.
Теперь новый интерпретатор PHP должен быть установлен по умолчанию для проекта.
Разобравшись с интерпретатором, давайте посмотрим на запуск Laravel Pint для форматирования файлов.
Запуск линтеров и форматтеров в контейнере
Docker В этой статье я рассмотрю запуск Laravel Pint. Тем не менее, этот же метод может быть использован для PHP CS Fixer, PHPStan и других качественных инструментов. Позже я также рассмотрю, как это сделать с помощью Node и таких инструментов, как Prettier Во-первых, установите Prettier с помощью следующей команды:Обратите внимание, что команда имеет префикс sail
,.
Laravel Pint
Для начала:
-
Перейдите в «Настройки» > PHP > Quality Tools.
-
Разверните раздел Laravel Pint и включите Pint.
-
Установите конфигурацию на интерпретатор, указывающий на контейнер Docker, в моем случае это
laravel.test
. -
Нажмите на три точки
...
, чтобы настроить Pint для интерпретатора.
После нажатия на три точки ...
откроется новое окно, в котором можно добавить новую конфигурацию Pint.
-
Нажмите на значок
+
плюса в левом верхнем углу. -
Выберите интерпретатор, указывающий на контейнер Docker.
После выбора интерпретатора и нажатия кнопки «ОК» конфигурация должна быть создана. Следующим шагом является установка пути и проверка.
-
В поле "Laravel Pint path" добавьте
vendor/bin/pint
указатель на двоичный файл Pint в каталоге поставщика Composer Перейдите в «Настройки» > PHP > Composer. -
Нажмите кнопку «Подтвердить».
-
Если все верно, версия Pint должна быть показана внизу.
С этим набором Pint должен быть установлен в качестве внешнего форматера. Вернитесь в Настройки > PHP > Quality Tools, прокрутите вниз и нажмите на переключатель «Laravel Pint» в разделе «Внешние средства форматирования».
Теперь код можно переформатировать с помощью Laravel Pint из контейнера Docker.
В приведенном выше примере некорректный код подчеркнут волнистой линией, потому что он не соответствует форматированию, установленному Laravel Pint. После форматирования фигурные скобки класса и метода фиксируются, фигурные скобки добавляются к условному выражению, а над оператором return добавляется пустая строка.
Чтобы сделать это еще проще, включите форматирование при сохранении. Для этого перейдите в «Настройки» > «Инструменты» > «Действия» при сохранении и установите флажок «Переформатировать код».
Теперь каждый раз, когда файл сохраняется, он будет автоматически отформатирован Laravel Pint, запущенным на контейнере Docker.
Prettier Во-первых, установите Prettier с помощью следующей команды:Обратите внимание, что команда имеет префикс sail
,
First, install Prettier Во-первых, установите Prettier с помощью следующей команды:Обратите внимание, что команда имеет префикс sail
, using the following command:
sail npm Для npm install --save-dev --save-exact prettier
Notice the command was prefixed with sail
, which installs Prettier Во-первых, установите Prettier с помощью следующей команды:Обратите внимание, что команда имеет префикс sail
, using the version of Node and npm Для npm on the Docker container versus the local version.
Далее, по аналогии с PHP, создадим интерпретатор Node, указывающий на версию Docker. Перейдите в раздел «Настройки» > «Языки и фреймворки» > Node.js. Затем нажмите на три точки ...
рядом с надписью «Интерпретатор узлов».
В новом окне нажмите кнопку с плюсом +
в левом верхнем углу. Затем выберите «Добавить удаленный...».
Так же, как и раньше с PHP, выберите опцию «Docker Compose» и выберите сервис.laravel.test
Node is now pointing at the version in the Docker container. To continue with Prettier Во-первых, установите Prettier с помощью следующей команды:Обратите внимание, что команда имеет префикс sail
,, go to Settings > Languages & Frameworks > JavaScript > Prettier Во-первых, установите Prettier с помощью следующей команды:Обратите внимание, что команда имеет префикс sail
,.
In the Prettier Во-первых, установите Prettier с помощью следующей команды:Обратите внимание, что команда имеет префикс sail
, settings:
-
Select "Automatic Prettier Во-первых, установите Prettier с помощью следующей команды:Обратите внимание, что команда имеет префикс
sail
, configuration". -
Установите флажок «Запускать при сохранении» для автоматического форматирования при сохранении файла.
Now, Prettier Во-первых, установите Prettier с помощью следующей команды:Обратите внимание, что команда имеет префикс sail
, is all setup and running right from the Docker container. These same steps can be followed to run ESLint.
Запуск тестов из контейнера
Docker В этой статье я буду использовать PHPUnit. Однако те же шаги будут применяться и к средствам выполнения тестов Pest и JavaScript, таким как Jest.
Так как laravel.test
он уже установлен в качестве интерпретатора по умолчанию для проекта, тесты должны автоматически запускаться с использованием PHPUnit из контейнера Docker. Это можно увидеть, выполнив тест:
После запуска теста в выходных данных теста отображается команда. Вы можете видеть, laravel.test
что он был запущен с помощью docker-compose
указателя на службу локального docker-compose.yml
файла.
Если по какой-то причине это не работает, возможно, существующий проект с другими конфигурациями или альтернативная тестовая среда, вы можете перейти к следующим шагам.
Перейдите в Настройки > PHP > Тестовые фреймворки. Затем нажмите кнопку с плюсом+
, чтобы добавить новую тестовую платформу.
laravel.test
Выберите интерпретатор в новом окне:
Теперь доступен новый тестовый фреймворк PHPUnit.
Затем измените конфигурации запуска, перейдя в меню «Выполнить» и выбрав «Редактировать конфигурации...».
В новом окне нажмите на значок шестеренки рядом с полем «Использовать альтернативный конфигурационный файл».
Откроется новое окно для выбора новой удаленной конфигурации PHPUnit.
Наконец, убедитесь, что конфигурация указывает на laravel.test
интерпретатор или интерпретатор по умолчанию, если он установлен как laravel.test
.
Ну вот! Теперь все должно быть настроено на запуск PHPUnit из контейнера Docker.
Менеджеры пакетов Вы даже можете запускать свои менеджеры
пакетов, такие как Composer Перейдите в «Настройки» > PHP > Composer и npm Для npm, из контейнера Docker.
Composer Перейдите в «Настройки» > PHP > Composer
Go to Settings > PHP > Composer Перейдите в «Настройки» > PHP > Composer, then:
-
Выберите радио для «Удаленного переводчика».
-
Выберите
laravel.test
в качестве "Интерпретатор CLI".
With Composer Перейдите в «Настройки» > PHP > Composer set, go to Tools > Composer Перейдите в «Настройки» > PHP > Composer, and select a command that will be run from the Docker container.
npm Для npm
For npm Для npm, the remote Node interpreter should have already been set up from the Prettier Во-первых, установите Prettier с помощью следующей команды:Обратите внимание, что команда имеет префикс sail
, steps above. Now, open the npm Для npm tool window.
The npm Для npm tool window will show all the scripts configured in the package.json
file. Right-click on the dev
script and click "Edit 'dev' Settings...".
С открытым новым окном:
-
Установите "Интерпретатор узла" на интерпретатор Docker compose
laravel.test
, если он еще не установлен. -
Add a new environment variable:
WWWUSER=sail
. This prevents PhpStorm from trying to run the npm Для npm commands as thenpm Для npm
user.
Now, the dev
script can be run from the npm Для npm tool window and the output is shown in PhpStorm.
Заключение: Я
надеюсь, что это будет полезно для всех, кто работает над проектом с конфигурацией Docker. Несмотря на то, что выполнение этих сценариев и двоичных файлов из Docker может быть медленнее, чем локальное, его преимущество заключается в том, что все разработчики проекта используют одни и те же версии. Это должно помочь предотвратить печально известные проблемы типа «он работает на моем компьютере». При использовании Docker эти различные языки, скрипты и двоичные файлы также не нужно устанавливать локально. Я могу запустить все это, даже не установив Node на свой локальный компьютер.
Спасибо за внимание! Пожалуйста, дайте мне знать, если у вас есть какие-либо вопросы в комментариях.