minify-cshtml-webpack-plugin
Version:
Minify CSHTML Razor Views
59 lines (47 loc) • 2.03 kB
JavaScript
;
const fs = require('fs');
const path = require('path');
const minify = require('./lib/minifier').minify;
class MinifyHtmlWebpackPlugin {
constructor(options = {}) {
this.options = options
}
minfifyFiles(srcDir, destDir) {
fs.readdir(srcDir, (err, files) => {
if (err) throw err;
files.forEach(file => {
if (!this.pattern.test(file)) {
let inputFile = path.resolve(srcDir, file);
if (fs.statSync(inputFile).isDirectory()) {
this.minfifyFiles(inputFile, path.resolve(destDir, file));
} else {
let source = fs.readFileSync(inputFile, 'utf8');
let result = minify(source);
let outputFile = path.resolve(destDir, file);
let outputMin = outputFile.substring(0, outputFile.lastIndexOf(".")) + ".min" + outputFile.substring(outputFile.lastIndexOf("."))
fs.writeFileSync(outputMin, result);
}
}
});
});
}
apply(compiler) {
compiler.hooks.emit.tap('MinifyHtmlWebpackPlugin', compilation => {
if (this.options.verbose) {
console.log('Starting to minimize HTML...')
}
const root = compilation.options.context;
const dir = this.options.dir || root;
if (!this.options.src) {
throw new Error('`src` is missing from the options.')
}
const dest = this.options.dest || this.options.src;
this.pattern = this.options.ignoreFileNameRegex || /''/;
this.contentPattern = this.options.ignoreFileContentsRegex || /''/;
const srcDir = path.resolve(dir, this.options.src);
const destDir = path.resolve(dir, dest);
this.minfifyFiles(srcDir, destDir);
})
}
}
module.exports = MinifyHtmlWebpackPlugin;