Laravel-mix. Возможна ли раздельная сборка ресурсов для фронта и админки?



@KBBS

Здравствуйте.
Есть публичная часть сайта (далее frontend) и административная (backend).
Ресурсы (css, js) собираются через laravel-mix. Микс шестой версии.
На выходе хочу получить примерно такую структуру директорий: public/assets/frontend/js/ — с файлами, относящимися к фронту, и public/assets/backend/js/ — с файлами бэка.
При этом, ключевой момент, чтобы для фронта и бэка генерировались собственные manifest.js и vendor.js.
К сожалению, никак не могу добиться такого результата.

Наиболее рабочий вариант, который у меня получился, это разбить общий webpack.mix.js на отдельные webpack.mix.frontend.js и webpack.mix.backend.js. А в package.json прописать отдельные скрипты для сборки с явным указанием —mix-config: —mix-config webpack.mix.frontend и —mix-config webpack.mix.backend соответственно.
Такое даже работает. Но при этом ожидаемо переписывается mix-manifest.json, что мне не особо подходит. Имею ввиду, что если собираю ресурсы для бэка, то в mix-manifest.json будут только они, а записи для фронта теряются.

Вообще, насколько реально осуществить то, что я хочу, в рамках laravel-mix?

Спасибо.


Решения вопроса 0


Ответы на вопрос 1



@delphinpro

Вы можете сделать дополнительные таски в package.json
Вы можете писать условия в webpack.mix.js

Доп. таски:

scripts: {
        "production": "cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --no-progress --config=node_modules/laravel-mix/setup/webpack.config.js"
        "production:admin": "cross-env TARGET=admin NODE_ENV=production node_modules/webpack/bin/webpack.js --no-progress --config=node_modules/laravel-mix/setup/webpack.config.js"
}

Проверка

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

if (process.env.TARGET == 'admin') {

  mix.js('src/admin.js', 'dist');

} esle {

  mix.js('src/front.js', 'dist');

}

// Общие настройки

if (mix.inProduction()) mix.version();

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *