• Час читання ~1 хв
  • 10.06.2022

Давайте поговоримо про те, як позбутися NodeJS у ваших конвеєрах CI.

Я запускаю Chipper CI (безперервна інтеграція для Laravel). Мене завжди дратувало, що збірки Webpack займають більше часу і викликають більше проблем, ніж фактична цінна частина конвеєра CI.

Більшості з нас просто потрібно запустити наші тести та, можливо, розпочати розгортання.Завдання побудови вузлів додають купу часу та вимагають значно більше використання ЦП/ОЗУ.

Що робити, якщо нам просто не потрібен Node у нашому трубопроводі? Чи можемо ми просто... ні?

Відповідь: безперечно, можливо!

Тестування функцій

Дуже часто єдиною причиною створення статичних активів у конвеєрі CI є створення файлу mix-manifest.json.

Це дозволяє помічнику mix() працювати під час виконання тестів Feature Laravel. Тести функцій здійснюють HTTP-виклики до вашої програми, і, таким чином, часто відображають шаблони блейд-шаблів, які використовують помічник mix().

Якщо у вас немає файлу маніфесту, виникає помилка!

Створення цього файлу маніфесту передбачає створення ваших статичних активів - іншими словами, використання npm (або yarn) для встановлення залежностей і виконання завдань Webpack:

# Build static assets
 
npm ci --no-audit
npm run dev

Примітка: ви майже напевно маєте зафіксувати свій package-lock.json і запускає npm ci --no-audit замість npm install!

Якщо ви подивитеся на ваш файл public/mix-manifest.json, він, швидше за все, виглядає приблизно так (з хешами чи без, залежно від того, чи ввімкнено керування версіями):

{
    "/js/app.js": "/js/app.js",
    "/js/foo.js": "/js/foo.js",
    "/css/app.css": "/css/app.css"
}

Ось увага: вам не обов’язково, щоб цей файл існував для ваших тестів!

У методі setUp() вашого тесту ви можете додати таку магію:

protected function setUp(): void
{
    parent::setUp();
 
    $this->withoutMix();
}

Якщо це встановлено, помічник mix() не повертатиме жодних помилок із відсутнім файлом маніфесту. Ваші тести можуть пройти без виконання завдань NodeJS!

Інше, що ви можете зробити, це створити файл маніфесту для свого конвеєра CI, який ви скопіюєте для тестування.

Скажімо, наша конфігурація Mix генерує наведений вище файл mix-manifest.json. Ми можемо зафіксувати фіктивний файл маніфесту в tests/mix-manifest.json, і він завжди буде доступним!

Тоді в наших сценаріях конвеєра CI ми можемо використовувати цей файл замість встановлення/побудови залежностей від Node:

# What if we created a mix-manifest.json file just for testing?
# During CI, we can just move it where it needs to go
cp tests/mix-manifest.json public/mix-manifest.json
 
# And then run your tests, no NodeJS required!
php artisan test

Якщо цей файл на місці, помічник mix() працюватиме, і ваші тести функцій можуть пройти без проблем!

Цей (або будь-який інший метод!), який створює правильний файл маніфесту, може допомогти вам заощадити БАГАТО часу та ресурсів сервера у ваших конвеєрах створення CI.

Вам потрібно буде оновлювати файл tests/mix-manifest.json щоразу, коли ви змінюєте конфігурацію таким чином, щоб файли додавались до справжнього файлу маніфесту.

Коли потрібно створювати активи?

Іноді вам справа потрібно створити активи у вашому конвеєрі CI! Нижче наведено найпоширеніші випадки:

  1. When you build production assets to bundle them up into an “artifact” (zip file, container image, etc) that you can deploy
  2. When you run other node commands as part of your test suite, such as eslint
  3. When you are browser testing with Laravel Dusk

Що робити, якщо мені потрібно створити активи?

Comments

No comments yet
Yurij Finiv

Yurij Finiv

Full stack

Про мене

Professional Fullstack Developer with extensive experience in website and desktop application development. Proficient in a wide range of tools and technologies, including Bootstrap, Tailwind, HTML5, CSS3, PUG, JavaScript, Alpine.js, jQuery, PHP, MODX, and Node.js. Skilled in website development using Symfony, MODX, and Laravel. Experience: Contributed to the development and translation of MODX3 i...

Про автора CrazyBoy49z
WORK EXPERIENCE
Контакти
Ukraine, Lutsk
+380979856297