59 lines
1.8 KiB
JavaScript
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;
|