html-bundler-webpack-plugin
Version:
Generates complete single-page or multi-page website from source assets. Build-in support for Markdown, Eta, EJS, Handlebars, Nunjucks, Pug. Alternative to html-webpack-plugin.
65 lines (54 loc) • 1.88 kB
JavaScript
// supports for responsive-loader
const ResponsiveLoader = require('./Extras/ResponsiveLoader');
class AssetResource {
pluginOption = null;
resolver = null;
assetTrash = null;
responsiveLoader = null;
constructor({ pluginOption, resolver, assetTrash }) {
this.pluginOption = pluginOption;
this.assetTrash = assetTrash;
this.resolver = resolver;
this.responsiveLoader = new ResponsiveLoader({ pluginOption });
}
/**
* @param {Object} compiler The webpack compiler object.
*/
init(compiler) {
// initialize responsible-loader module
this.responsiveLoader.init(compiler);
}
/**
* @param {Object} module The Webpack module.
*/
saveData(module) {
const { buildInfo, resource } = module;
let assetFile = buildInfo.filename;
// resolve SVG filename with fragment, like './icons.svg#home'
if (resource.indexOf('.svg#') > 0) {
if (assetFile.indexOf('.svg#') > 0) {
// fix save file name when filename in Webpack config is like '[name][ext][fragment]'
const [file] = assetFile.split('#');
buildInfo.filename = file;
} else {
// fix output asset filename used in HTML
const [, fragment] = resource.split('#');
assetFile += `#${fragment}`;
}
}
const assetInfo = {
resource,
filename: assetFile,
resolve: undefined,
};
if (this.responsiveLoader.findModuleLoaderOptions(module)) {
assetInfo.filename = undefined;
assetInfo.resolve = (issuerInfo) => this.responsiveLoader.getAsset(module, issuerInfo);
// remove an original asset filename generated by Webpack, because responsive-loader generates own filename
this.assetTrash.add(assetFile);
}
// save the asset file that can be used in many files
this.resolver.addAsset(assetInfo);
}
}
module.exports = AssetResource;