mirror of
https://github.com/DanielnetoDotCom/YouPHPTube
synced 2025-10-03 09:49:28 +02:00
106 lines
2.5 KiB
JavaScript
106 lines
2.5 KiB
JavaScript
const fs = require('fs');
|
|
const chokidar = require('chokidar');
|
|
const path = require('path');
|
|
const notify = require('./notifications');
|
|
const jscompiler = require('./jscompiler');
|
|
const postcssCompiler = require('./postcss');
|
|
const terser = require('terser');
|
|
|
|
let config = {
|
|
js: {
|
|
src: 'src/js',
|
|
dest: 'dist/js',
|
|
},
|
|
css: {
|
|
src: 'src/postcss',
|
|
dest: 'dist/css',
|
|
}
|
|
};
|
|
|
|
/**
|
|
* Handle Javascript files
|
|
* compile the javascript files
|
|
* to es2015, minify and sync the files
|
|
*
|
|
* @param {string} file path
|
|
*/
|
|
async function handleJavascript(file) {
|
|
file = path.join(config.js.src, 'glightbox.js');
|
|
|
|
const name = path.basename(file);
|
|
|
|
const res = await jscompiler({
|
|
file,
|
|
dest: config.js.dest,
|
|
format: 'umd',
|
|
sourcemap: false,
|
|
moduleID: 'GLightbox'
|
|
}).catch(error => console.log(error));
|
|
|
|
if (!res) {
|
|
notify('Build Error', `View logs for more info`);
|
|
console.log(res)
|
|
return false;
|
|
}
|
|
|
|
const minName = name.replace('.js', '.min.js');
|
|
const processed = path.join(config.js.dest, name);
|
|
const code = fs.readFileSync(processed, 'utf8');
|
|
const minified = terser.minify(code);
|
|
const minifyPath = path.join(config.js.dest, minName);
|
|
fs.writeFileSync(minifyPath, minified.code);
|
|
|
|
notify('Javascript Build', `Compiled and Minified ${name}`);
|
|
}
|
|
|
|
|
|
/**
|
|
* Handle Postcss files
|
|
* compile the css files
|
|
*
|
|
* @param {string} file path
|
|
*/
|
|
async function handlePostCSS(file) {
|
|
const name = path.basename(file);
|
|
const dest = config.css.dest;
|
|
|
|
let res = await postcssCompiler({
|
|
file,
|
|
dest,
|
|
minify: true
|
|
}).catch(error => console.log(error));
|
|
if (!res) {
|
|
return false;
|
|
}
|
|
notify('PostCSS Build', `Compiled and Minified ${name}`);
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
* Watcher
|
|
* what the files for the backedn
|
|
* this includes js and css files
|
|
*/
|
|
function filesWatcher() {
|
|
const watcher = chokidar.watch(['src'], {
|
|
ignored: ['.DS_Store', 'src/js/.jshintrc', 'src/js/.babelrc'],
|
|
persistent: true,
|
|
depth: 3,
|
|
awaitWriteFinish: {
|
|
stabilityThreshold: 500,
|
|
pollInterval: 500
|
|
},
|
|
});
|
|
|
|
watcher.on('change', path => {
|
|
if (path.endsWith('.js')) {
|
|
return handleJavascript(path);
|
|
}
|
|
if (path.endsWith('.css')) {
|
|
return handlePostCSS(path);
|
|
}
|
|
})
|
|
watcher.on('ready', () => notify('Watching files', 'Initial scan complete. Ready for changes'))
|
|
}
|
|
filesWatcher();
|