70 lines
1.7 KiB
JavaScript
70 lines
1.7 KiB
JavaScript
const
|
|
{ join } = require('path'),
|
|
{ writeFileSync } = require('fs'),
|
|
{ renderSync } = require('node-sass'),
|
|
importer = require('node-sass-js-importer');
|
|
|
|
|
|
/**
|
|
* inputs variable:
|
|
* scss file inputs that want be css
|
|
* WARNING: don't call files with 'src'! because output file don't need 'src'!!
|
|
*/
|
|
const inputs = [
|
|
'style.scss'
|
|
];
|
|
|
|
/**
|
|
* Write file
|
|
* @param {String} path output file path
|
|
* @param {Buffer} data complied data as buffer
|
|
*/
|
|
const write = async (path, data) => {
|
|
await writeFileSync(path, data);
|
|
}
|
|
|
|
/**
|
|
* Complie scss file to css
|
|
* @param {String} input scss file path
|
|
* @param {Boolean} minify minfiy css
|
|
*/
|
|
const exec = async (input, minify = true) => {
|
|
/**
|
|
* output variable:
|
|
* convert input file path to css output file path
|
|
* like: from/path/file.scss -> public/css/from/file.css
|
|
*
|
|
* the minfied version (.min.css) would be when minfiy be true
|
|
*/
|
|
let output = `public/${input}`.replace('scss', minify ? 'min.css' : 'css');
|
|
input = `src/${input}`; // link input to source folder
|
|
|
|
try {
|
|
let result = await renderSync({
|
|
file: join(__dirname, '..', input),
|
|
outputStyle: minify ? 'compressed' : 'expanded',
|
|
outFile: output,
|
|
sourceMap: true,
|
|
importer: [importer]
|
|
});
|
|
|
|
console.log(`${input} \t\t=>\t ${output}`);
|
|
|
|
output = join(__dirname, '..', output);
|
|
input = join(__dirname, '..', input);
|
|
|
|
await write(output, result.css);
|
|
await write(`${output}.map`, result.map);
|
|
|
|
} catch (error) {
|
|
console.error(error);
|
|
}
|
|
}
|
|
|
|
const complie = async () => {
|
|
for (let input of inputs) {
|
|
exec(input);
|
|
}
|
|
}
|
|
|
|
module.exports = { complie }; |