UNPKG

laravel-simple-view-struct

Version:

Extensão do sitema de frontend para o Laravel Mix (Generico)

96 lines (80 loc) 2.66 kB
let fs = require('fs'); let path = require("path"); let rimraf = require("rimraf"); /* |-------------------------------------------------------------------------- | Mix Asset Management |-------------------------------------------------------------------------- | | Arquivo de configuração do mix para os projetos Datasafer | */ //String contains function contains(target, pattern){ var value = 0; pattern.forEach(function(word){ value = value + target.includes(word); }); return (value === 1); } //Percorre o diretório retornando o caminho do arquivo let getResources = (dir) => { //Busca as views .blade.php recursivamente var files = fs.readdirSync(dir).filter(file => { var isfile = fs.statSync(`${dir}/${file}`).isFile(); var isvalid = false; //Se é um arquivo, checamos se termina em .scss ou .js ou .css if (isfile) { if (contains(file, ['.css', '.scss', '.js'])) { isvalid = true; } } return isvalid; }); var directories = fs.readdirSync(dir).filter(file => { return fs.statSync(`${dir}/${file}`).isDirectory(); }); //Implementa a recursividade directories.forEach((subdir) => { //Adiciona o subdir aos arquivos em subdiretórios var subfiles = []; getResources(`${dir}/${subdir}`).forEach((subfile) => { subfiles.push(`${subdir}/${subfile}`); }); files = files.concat(subfiles); }); return files; }; //Limpa um diretório let clearFolder = dir => { if (!fs.existsSync(dir)){ fs.mkdirSync(dir); } else { fs.readdir(dir, (err, files) => { if (err) throw err; for (const file of files) { rimraf.sync(path.join(dir, file)); } }); } }; /** * Recebe um objeto laravel mix como parâmetro, * var clear limpa as pastas js e css em public antes de gerar os novos arquivos */ module.exports = function(mix, clear = false) { //Clear public folders if (clear) { clearFolder('public/js'); clearFolder('public/css'); } //Configure resources mix.sourceMaps().version(); //Create the views bundles getResources('resources/views').forEach((file) => { //A variável file contém o path relativo do arquivo dentro da pasta views em resources if (file.includes('.js')) mix.scripts(`resources/views/${file}`, `public/js/${file}`); if (file.includes('.scss')) mix.sass(`resources/views/${file}`, `public/css/${file.replace('.scss', '.css')}`); }); return mix; };