2024-12-02 00:35:25 +01:00

59 lines
1.8 KiB
JavaScript

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;