grunt-purgecss
Version:
Grunt plugin for PurgeCSS
46 lines (42 loc) • 1.52 kB
JavaScript
;
var purgecss = require('purgecss');
function getAvailableFiles(grunt, files = []) {
return files.filter((filepath) => {
// Warn on and remove invalid source files (if nonull was set).
if (!grunt.file.exists(filepath)) {
grunt.log.warn(`Source file "${filepath}" not found.`);
return false;
}
return true;
});
}
function gruntPurgeCSS(grunt) {
grunt.registerMultiTask("purgecss", "Grunt plugin for PurgeCSS", function () {
const done = this.async();
const options = this.options(purgecss.defaultOptions);
const promisedPurgedFiles = [];
for (const file of this.files) {
const source = getAvailableFiles(grunt, file.src);
const purgedCss = new purgecss.PurgeCSS()
.purge({
...options,
css: source,
})
.then((purgeCSSResults) => {
if (typeof file.dest === "undefined") {
throw new Error(`Destination file not found`);
}
grunt.file.write(file.dest, purgeCSSResults[0].css);
// Print a success message
grunt.log.writeln(`File "${file.dest}" created.`);
});
promisedPurgedFiles.push(purgedCss);
}
Promise.all(promisedPurgedFiles)
.then(() => {
done();
})
.catch(() => done(false));
});
}
module.exports = gruntPurgeCSS;