Я стикався з розробниками в соціальних мережах і на різних роботах, які мали проблеми з налаштуванням своїх редакторів, коли задіяний Docker. У цій статті я розповім про PhpStorm і про те, як його правильно використовувати з Docker. При використанні Docker зазвичай краще запускати різні скрипти та двійкові файли з контейнера Docker, а не запускати локально. Сюди входять лінтери, форматери і навіть тести.
У цій статті я буду використовувати додаток Laravel з Laravel Sail як приклад для налаштування PhpStorm.
Встановлення
вітрил Laravel Використовуйте наступну команду, щоб розкрутити нову програму Laravel за допомогою Sail:
curl -s "https://laravel.build/phpstorm-docker" | bash
Це може зайняти кілька хвилин. Як тільки це буде зроблено, біжіть sail up
, щоб запустити програму.
/vendor/bin/sail up
Підказка: Додайте відносну теку до вашого PATH, щоб увімкнути виклик двійкових файлів з Composer Перейдіть до налаштувань > PHP > Composer, потім: та Node, використовуючи ім'я двійкового файлу замість усього шляху. У вашому
.zshrc
або.bashrc
, додайте наступне:export PATH="./vendor/bin:$PATH" export PATH="./node_modules/.bin:$PATH"
Тоді, замість виклику
/vendor/bin/sail up
, тепер можна викликатиsail up
!
Встановіть інтерпретатор PHP PhpStorm
Відкрийте вікно налаштувань і перейдіть до розділу PHP. Звідти натисніть поруч ...
із полем CLI Interpreter.
Можливо, у вас налаштований локальний інтерпретатор 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 та таких інструментів, як Преттьє.
Laravel Pint
Для початку:
-
Перейдіть до налаштувань > PHP > Інструменти якості.
-
Розгорніть розділ Laravel Pint і ввімкніть пінту.
-
Встановіть конфігурацію на інтерпретатор, що вказує на контейнер Docker, у моєму випадку це
laravel.test
. -
Натисніть три крапки
...
, щоб налаштувати пінту для перекладача.
Після натискання на три крапки ...
відкриється нове вікно, у якому можна додати нову конфігурацію пінти.
-
Натисніть значок
+
плюса у верхньому лівому куті. -
Виберіть інтерпретатор, який вказує на контейнер 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.
Преттьє
First, install Преттьє using the following command:
sail npm Для npm install --save-dev --save-exact prettier
Notice the command was prefixed with sail
, which installs Преттьє using the version of Node and npm Для npm on the Docker container versus the local version.
Далі, аналогічно PHP, створіть інтерпретатор Node, який вказує на версію Docker. Перейдіть до Settings > Languages & Frameworks > Node.js. Звідти натисніть три крапки ...
поруч із «Інтерпретатор вузла».
У новому вікні натисніть кнопку з плюсом +
у верхньому лівому куті. Потім виберіть «Додати пульт дистанційного керування...».
Так само, як і раніше з PHP, виберіть опцію «Docker Compose» і виберіть laravel.test
сервіс.
Node is now pointing at the version in the Docker container. To continue with Преттьє, go to Settings > Languages & Frameworks > JavaScript > Преттьє.
In the Преттьє settings:
-
Select "Automatic Преттьє configuration".
-
Поставте галочку навпроти пункту "Запускати при збереженні" для автоматичного форматування при збереженні файлу.
Now, Преттьє is all setup and running right from the Docker container. These same steps can be followed to run ESLint.
Запуск тестів з Docker Container
Для цієї статті я буду використовувати PHPUnit. Однак ті ж кроки будуть застосовуватися і до запускачів тестів Pest і JavaScript, таких як Jest.
Оскільки laravel.test
вже встановлено інтерпретатор за замовчуванням для проекту, тести повинні автоматично запускатися за допомогою PHPUnit з контейнера Docker. Це можна побачити, запустивши тест:
Після запуску тесту результат тесту показує команду. Ви можете побачити, що його було запущено за допомогою docker-compose
вказівника миші laravel.test
на службу локального docker-compose.yml
файла.
Якщо з якихось причин це не працює, можливо, існуючий проект з іншими конфігураціями або альтернативний тестовий фреймворк, ви можете перейти до наступних кроків.
Зайдіть в Налаштування > PHP > Test Frameworks. Потім натисніть кнопку з плюсом +
, щоб додати новий тестовий фреймворк.
Виберіть 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 Преттьє 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...".
З відкритим новим вікном:
-
Встановіть "Інтерпретатор вузлів" на інтерпретатор компонування
laravel.test
Docker, якщо він ще не встановлений. -
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 на моєму локальному комп'ютері.
Дякую, що прочитали! Будь ласка, дайте мені знати, якщо у вас виникнуть запитання в коментарях.