const BUILD_PATH = 'ui/assets/build'; const MAIN_SCSS_PATH = 'ui/assets/css/admin.scss'; const MODULES_PATH = '../../../node_modules'; const compressor = require(`${MODULES_PATH}/node-minify`); const sass = require(`${MODULES_PATH}/node-sass`); const fs = require('fs'); const path = require('path'); /** * Functions */ /** * Convert each line of text file into item array * * @param listFileName * @returns {string[]} */ function LoadListIntoArray(listFileName) { // Split every line into array let listTemp = fs.readFileSync(listFileName).toString().split("\n"); // Clean array: let listRet = listTemp.filter((x) => { // remove all comments start with ';' and empty lines ('\r') return x.replace(/^;.*/, '').replace('\r', '').length > 0 }).map((d) => { return d.replace('\r', '') }); return listRet; } /** * MAIN */ if (!fs.existsSync(BUILD_PATH)) { console.log(`Create folder ${BUILD_PATH}`); fs.mkdirSync(BUILD_PATH); } let libList = LoadListIntoArray('build.js.list'); let cssList = LoadListIntoArray('build.css.list'); /** * CSS */ // Compile SCSS console.log('Compiling SCSS'); let buffer = sass.renderSync({file: MAIN_SCSS_PATH}); // Write to file CSS fs.writeFileSync(`${BUILD_PATH}/admin.min.css`, buffer.css); //Concatenate all CSS in one MIN.CSS file console.log('Bundle CSS'); compressor.minify({ compressor: 'clean-css', input: cssList, output: `${BUILD_PATH}/bundle.min.css` } ); /** * JS */ // Minify+Concatenate JS files it in one file console.log('Bundle JS'); compressor.minify({ compressor: 'terser', input: libList, output: `${BUILD_PATH}/bundle.min.js` } ); fs.unlinkSync(`${BUILD_PATH}/admin.min.css`); console.log('All done.');