Модули Nwidart Laravel для управления ресурсами с помощью веб-пакета и микширования. - PullRequest
0 голосов
/ 17 сентября 2018

Я использую модули laravel nwidart для создания отдельных модулей для приложения laravel, каждый модуль имеет код, содержащийся для этого модуля.В настоящее время я пытаюсь поместить файлы css, относящиеся к каждому модулю, в отдельный app.scss, а затем использовать веб-пакет для перемещения .scss в общедоступный каталог.

Мне удалось добиться этого путем включения отдельного веб-пакетаMIX-файлы для каждого модуля, который перемещает CSS в основной публичный каталог.Моя проблема, однако, заключается в том, что для достижения этого мне нужно запускать команду npm run dev в корне каждой папки модуля каждый раз, когда я хочу обновить CSS.Есть ли более простой способ запустить все файлы модуля webpack.mix.js в приложении, или мне придется делать это каждый раз вручную?

Вот пакет модулей, который я использую https://github.com/nWidart/laravel-modules

Также вот пример того, как выглядят каталоги

- приложение

---- Модули

------ Блог -> webpack.mix.js

-------- Ресурсы

----------- Активы

------------- Sass -> app.scss

Также здесь находится копия webpack.mix.js для модуля блога

const { mix } = require('laravel-mix');
require('laravel-mix-merge-manifest');

mix.setPublicPath('../../public').mergeManifest();

mix.sass( __dirname + '/Resources/assets/sass/app.scss', 'css/blog.css');

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

1 Ответ

0 голосов
/ 14 ноября 2018

У меня была эта проблема с модулем nwidart. Чтобы решить эту проблему в основном weppack.mix.js, напишите этот код:

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

/*
 |--------------------------------------------------------------------------
 | 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');

const moduleFolder = './Modules';

const dirs = p => fs.readdirSync(p).filter(f => fs.statSync(path.resolve(p,f)).isDirectory())

let modules = dirs(moduleFolder);

cssArray = [];
cssArray.push('public/css/app.css');

modules.forEach(function(m){
  let js = path.resolve(moduleFolder,m,'Resources','assets','js', 'app.js');
  mix.js(js,'public/js');
  let scss = path.resolve(moduleFolder,m,'Resources','assets','sass', 'app.scss');
  mix.sass(scss,'public/css/'+m+'.css');
  cssArray.push('public/css/'+m+'.css');
});

mix.styles(cssArray, 'public/css/all.css');
...