var fs = require('fs'); var mkdirp = require('mkdirp'); var path = require('path'); var RawSource = require("webpack-sources/lib/RawSource"); const { sources } = require('webpack'); const { Compilation } = require('webpack'); function SpritemapReplacePath (options) { this.options = { assetsConstants: false, assetPrefix: '~', manifestFilename: 'manifest.json', debug: false, chunkFilenameReplacement: [], } options && Object.assign(this.options, options); } SpritemapReplacePath.prototype.apply = function (compiler) { var self = this; let pluginName = 'SpritemapReplacePath'; let manifest = null; let spritemapFilename = null; compiler.hooks.compilation.tap(pluginName, (compilation) => { compilation.hooks.processAssets.tap( { name: pluginName, stage: Compilation.PROCESS_ASSETS_STAGE_SUMMARIZE, additionalAssets: false, }, (assets) => { let manifestAsset = compilation.getAsset('manifest.json'); if (manifestAsset) { manifest = JSON.parse(manifestAsset.source.source()); spritemapFilename = manifest['spritemap.svg']; } for (let i in assets) { if (!spritemapFilename) { continue; } const asset = compilation.getAsset(i); const contents = asset.source.source(); let updatedSrc = contents; updatedSrc = contents.replace( new RegExp('#spritemap\.svg#', 'g'), '/static' + spritemapFilename + '#' ); compilation.updateAsset( i, new RawSource(updatedSrc), ); } } ); }); }; module.exports = SpritemapReplacePath;