laravel-simple-view-struct
Version:
Extensão do sitema de frontend para o Laravel Mix (Generico)
96 lines (80 loc) • 2.66 kB
JavaScript
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;
};