DEV.RULES
Digital agency
181
Laravel

Как использовать Laravel.mix? Короткий гайд

От Святослав Торн, публикация от 23 July, 2020

Оригинал: ссылка

Перевод: Святослав Торн

Laravel.mix - это мощная обертка над Webpack'ом, благодаря которой мы можем управлять скриптами и стилями нашего приложения. Laravel.mix может работать не только в составе Laravel, его можно настроить для работы даже с WordPress. Laravel.MIX API - очень прост и интуитивно понятен, это позволит вам съэкономить кучу времени на настройке webpack.

Перед началом работы убедитесь что у Вас установлен  npm

 Laravel и Laravel.Mix

Для начала с Laravel.MIX запустите команду npm install, npm подтянет все пакеты в папку node_modules. Хорошо, теперь в корневой директории нашего проекта есть файл webpack.mix.js примерно с таким содержимым:

const mix = require('laravel-mix');

/*
 |--------------------------------------------------------------------------
 | Mix Asset Management
 |--------------------------------------------------------------------------
 |
 | Mix provides a clean, fluent API for defining some Webpack build steps
 | for your Laravel application. By default, we are compiling the Sass
 | file for the application as well as bundling up all the JS files.
 |
 */
mix.js('resources/js/app.js', 'public/js')
    .sass('resources/sass/app.scss', 'public/css');

Из файла видно, что к нашей константе mix мы можем цеплять методы один за другим. Рассмотрим основые вохможности для миксования ресурсов.

CSS Preprocessors

Вы можете писать стили с помощью SASS, Less, Stylus и PostCSS без лишних хлопот. Вот простой пример с SCSS. Нам необходимо добавить нужный метод в наш файл:

const mix = require("laravel-mix");
mix.sass("resources/sass/app.scss", "public/css");

Сейчас мы можем запустить команду npm run watch и Laravel.mix будет слушать изменения в файле resources/sass/app.scss и компилировать его автоматически в public/css/app.scss. На данный момент файл не минимизирован, чтобы его минимизировать для продакшена, просто выполним команду npm run prod. Если вы не работаете с препроцессорами и лишь хотите объеденить и минимизировать свои CSS стили - Plain CSS

Доступные методы: Less, Sass, Stylus, Plain CSS.

JS

Работа с JavaScript файлами абсолютно аналогична приведенному выше примеру. У вас есть куча исходных js файлов и один итоговый файл. Разнообразие методов и их настройки больше чем у стилей. Расмотрим некоторые из них.

Самый простой метод это mix.js(src | [src], output) - невинный на вид метод, который дает вам, следующие возможности:

  • ES 2017 + компиляция
  • Сборка и компиляция компонентов Vue.js
  • Горячая замена модуля (возможно не точный перевод - Hot module replacement)

Все это значить что вы можете писать на современном JS, онг будет скомпилирован, минимизирован и объеденен - все это после запуска команды npm run prod.

Вот небольшой пример:

const mix = require("laravel-mix");

// 1. Один исходный файл
mix.js(
  "resources/js/app.js",
  "public/js",
);

// 2. Несколько исходный файлов
mix.js(
  ["resources/js/bootstrap.js", "resources/js/app.js"],
  "public/js/app.js",
);

Ознакомиться со всеми методами можно тут.

Горячая перезагрузка с BrowserSync (синхронизация браузера)

Запуск BrowserSync позволяет быстро перезагрузить ваши скрипты, стили и Blade-файлы. Благодаря этому разработка происходит быстрее. Его использование выглядить очень очевидно:

const mix = require("laravel-mix");
mix.browserSync("http://127.0.0.1:8000"); 

Просто запустите npm run watch и начинайте творить крутые вещи!

Подключение Asset'ов и управление версиями

Laravel.mix упрощает работу с версионированием. Вместо управления версиями с помощью хэш строки, вы можете использовать сппециальный метод mix() в свой Blade файл:

<link rel="stylesheet" href="{{ mix('css/app.css') }}"> 

После выполнения команды npm run prod это будет вышлядеть как то так:

 <link rel="stylesheet" href="/css/app.css?id=58852bd94d48b8bf5cb6">

Чтобы иметь возможность управлять версиями добавьте в наш конфигурационный файл webpack.mix.js новую строку:

const mix = require("laravel-mix");
mix.js("resources/js/app.js", "public/js");
mix.sass("resources/sass/app.scss", "public/css");
mix.browserSync("http://127.0.0.1:8000");
mix.version();

Для работы вышеприведенного кода не забудьте запустить команды php artisan serve и npm run watch

Список доступных методов: https://github.com/JeffreyWay/laravel-mix/blob/master/setup/webpack.mix.js