@zohodesk/client_build_tool
Version:
A CLI tool to build web applications and client libraries
47 lines (40 loc) • 1.47 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _webpack = require("webpack");
/* eslint-disable class-methods-use-this */
const pluginName = 'CssCustomOrderPlugin'; // TODO: Check for css minimizer plugin
class CssCustomOrderPlugin {
constructor(className) {
this.className = className || 'customCss';
}
apply(compiler) {
const {
RawSource
} = compiler.webpack.sources;
compiler.hooks.compilation.tap(pluginName, compilation => {
compilation.hooks.processAssets.tapAsync({
name: pluginName,
stage: _webpack.Compilation.PROCESS_ASSETS_STAGE_OPTIMIZE_SIZE
}, (assets, callback) => {
Object.keys(assets).filter(file => file.includes('runtime')).forEach(filename => {
try {
let source = assets[filename].source().toString();
let changedCode = `var referenceTag = document.getElementById(${this.className});
document.head.insertBefore(linkTag, referenceTag);`;
const result = source.replace('document.head.appendChild(linkTag);', changedCode);
compilation.updateAsset(filename, new RawSource(result));
callback();
} catch (e) {
console.error("issue in CssCustomOrderPlugin");
compilation.errors.push(e);
callback(e);
}
});
});
});
}
}
exports.default = CssCustomOrderPlugin;