Компиляция ресурсов с помощью Laravel Mix

Сайты Jigsaw настроены с поддержкой Laravel Mix из коробки. Если Вы когда-либо использовали Mix в проекте Laravel, Вы уже знаете, как использовать Mix с Jigsaw.


Настройка

Для начала убедитесь, что в Вашей среде установлены Node.js и NPM.

После установки Node.js и NPM подключите зависимости, необходимые для компиляции Ваших ресурсов:

$ npm install

Более подробные инструкции по установке смотрите в полной документации Laravel Mix.

Организация Ваших ресурсов

По умолчанию любые ресурсы, которые Вы хотите обработать с помощью Mix, должны находиться в /source/_assets:

source
_assets
js
main.js
css
main.css
_layouts
master.blade.php
assets
build
images
jigsaw.png
index.blade.php
tasks
vendor
...

Mix ищет каждый тип ресурса (например, CSS, JS, Sass, Less, и т.д.) в подкаталоге, названном в честь этого типа ресурса. Мы рекомендуем следовать этому соглашению, чтобы избежать дополнительной настройки.

По умолчанию, когда Webpack скомпилирует Ваши ресурсы, они будут помещены в соответствующие подкаталоги в /source/assets/build:

source
_assets
js
main.js
css
main.css
_layouts
master.blade.php
assets
build
css
main.css
js
main.js
mix-manifest.json
images
jigsaw.png
index.blade.php
tasks
vendor
...

Затем, когда Jigsaw соберет Ваш сайт, весь каталог /source/assets, содержащий Ваши файлы build (и любые другие каталоги, содержащие статические ресурсы, такие как images или fonts, которые Вы выберете для хранения там), будет можно скопировать в /build_local или /build_production.

В Ваших шаблонах Вы можете ссылаться на эти ресурсы с помощью директивы Blade mix. Если Вы используете настройку по умолчанию, Ваши скомпилированные ресурсы будут скопированы в каталог Вашего сайта /assets/build, который должен быть указан как второй параметр директивы mix:

<link rel="stylesheet" href="{{ mix('css/main.css', 'assets/build') }}">

Компиляция ваших ресурсов

Чтобы скомпилировать Ваши ресурсы, запустите:

$ npm run dev

Во-первых, Webpack скомпилирует Ваши ресурсы и сохранит их в каталоге /source/assets/build. Затем команда Jigsaw build будет запущена автоматически для сборки Вашего сайта (включая Ваши скомпилированные ресурсы) в /build_local. Затем Вы можете просмотреть свои изменения в браузере.

Наблюдение за изменениями

Запустите вручную npm run dev каждый раз, когда Вы вносите изменения, довольно быстро устаревает.

Вместо этого Вы можете запустить следующую команду, чтобы следить за изменениями в Вашем проекте:

$ npm run watch

Каждый раз, когда в Вашем проекте изменяется любой файл, Webpack перекомпилирует Ваши ресурсы, а Jigsaw регенерирует Ваши статические HTML-страницы в /build_local.

Использование npm run watch также включает Browsersync, поэтому Ваш браузер будет автоматически перезагружаться каждый раз, когда Вы вносите изменения. Он также управляет обслуживанием Вашего сайта локально для Вас, поэтому Вам не нужно запускать собственный локальный сервер PHP.

Вы также можете наблюдать за конкретной средой, запустив npm run local, npm run staging или npm run prod.


Изменение местоположения ресурсов

Если Вы хотите изменить исходный каталог для Ваших ресурсов, отредактируйте следующую строку в webpack.mix.js:

mix.setPublicPath('source/assets/build');

Если Вы хотите изменить каталог назначения для Ваших ресурсов, отредактируйте второй параметр каждого шага компиляции webpack.mix.js:

mix.jigsaw()
    .js('source/_assets/js/main.js', 'scripts')
    .postCss('source/_assets/css/main.css', 'styles')
    ...

Включение разных препроцессоров

Jigsaw поставляется со следующим файлом webpack.mix.js и настроен на использование Tailwind CSS и PostCSS из коробки:

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

mix.disableSuccessNotifications();
mix.setPublicPath('source/assets/build');

mix.jigsaw()
    .js('source/_assets/js/main.js', 'js')
    .postCss('source/_assets/css/main.css', 'css', [
        require('postcss-import'),
        require('tailwindcss'),
    ])
    .options({
        processCssUrls: false,
    })
    .version();

Если Вы хотите переключиться на Sass, Less, Coffeescript или воспользоваться другими функциями Mix, не стесняйтесь редактировать этот файл по своему усмотрению. Вот пример того, как может выглядеть использование Less и React:

mix.jigsaw()
    .react('source/_assets/js/main.js', 'js')
    .less('source/_assets/less/main.less', 'css')
    .version();

Встраивание Ваших ресурсов

Вы можете встроить свои ресурсы CSS или JavaScript в теги <style> или <script> на своей странице <head>, чтобы сохранить сетевой запрос и избежать блокировки загрузки остальной части страницы. Вспомогательная функция inline сделает это:

{{ inline(mix('css/main.css', 'assets/build')) }}

Примечание для пользователей Sass

Чтобы URL-адреса в Ваших файлах .scss, такие как фоновые изображения и шрифты, не обрабатывались и не изменялись Mix, убедитесь, что для параметра processCssUrls установлено значение false в Вашем файле webpack.mix.js.