UNPKG

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
// 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;