WIP - add extractor, generate snippet_data
This commit is contained in:
83
node_modules/optimize-css-assets-webpack-plugin/src/index.js
generated
vendored
Normal file
83
node_modules/optimize-css-assets-webpack-plugin/src/index.js
generated
vendored
Normal file
@ -0,0 +1,83 @@
|
||||
const url = require('url');
|
||||
|
||||
const LastCallWebpackPlugin = require('last-call-webpack-plugin');
|
||||
|
||||
class OptimizeCssAssetsWebpackPlugin extends LastCallWebpackPlugin {
|
||||
constructor(options) {
|
||||
super({
|
||||
assetProcessors: [
|
||||
{
|
||||
phase: LastCallWebpackPlugin.PHASES.OPTIMIZE_CHUNK_ASSETS,
|
||||
regExp: (options && options.assetNameRegExp) || /\.css(\?.*)?$/i,
|
||||
processor: (assetName, asset, assets) =>
|
||||
this.processCss(assetName, asset, assets),
|
||||
}
|
||||
],
|
||||
canPrint: options && options.canPrint,
|
||||
});
|
||||
|
||||
this.options.assetNameRegExp = !options || !options.assetNameRegExp ?
|
||||
/\.css(\?.*)?$/i :
|
||||
options.assetNameRegExp;
|
||||
this.options.cssProcessor = !options || !options.cssProcessor ?
|
||||
require('cssnano') :
|
||||
options.cssProcessor;
|
||||
this.options.cssProcessorOptions = !options || options.cssProcessorOptions === undefined ?
|
||||
{} :
|
||||
options.cssProcessorOptions;
|
||||
this.options.cssProcessorPluginOptions = !options || options.cssProcessorPluginOptions === undefined ?
|
||||
{} :
|
||||
options.cssProcessorPluginOptions;
|
||||
}
|
||||
|
||||
buildPluginDescriptor() {
|
||||
return { name: 'OptimizeCssAssetsWebpackPlugin' };
|
||||
}
|
||||
|
||||
processCss(assetName, asset, assets) {
|
||||
const parse = url.parse(assetName);
|
||||
const assetInfo = {
|
||||
path: parse.pathname,
|
||||
query: parse.query ? `?${parse.query}` : '',
|
||||
};
|
||||
|
||||
const css = asset.sourceAndMap ? asset.sourceAndMap() : { source: asset.source() };
|
||||
const processOptions = Object.assign(
|
||||
{ from: assetName, to: assetName },
|
||||
this.options.cssProcessorOptions
|
||||
);
|
||||
|
||||
if (processOptions.map && !processOptions.map.prev) {
|
||||
try {
|
||||
let map = css.map;
|
||||
if (!map) {
|
||||
const mapJson = assets.getAsset(`${assetInfo.path}.map`);
|
||||
if (mapJson) {
|
||||
map = JSON.parse(mapJson);
|
||||
}
|
||||
}
|
||||
if (
|
||||
map &&
|
||||
(
|
||||
(map.sources && map.sources.length > 0) ||
|
||||
(map.mappings && map.mappings.length > 0)
|
||||
)
|
||||
) {
|
||||
processOptions.map = Object.assign({ prev: map }, processOptions.map);
|
||||
}
|
||||
} catch (err) {
|
||||
console.warn('OptimizeCssAssetsPlugin.processCss() Error getting previous source map', err);
|
||||
}
|
||||
}
|
||||
return this.options
|
||||
.cssProcessor.process(css.source, processOptions, this.options.cssProcessorPluginOptions)
|
||||
.then(r => {
|
||||
if (processOptions.map && r.map && r.map.toString) {
|
||||
assets.setAsset(`${assetInfo.path}.map${assetInfo.query}`, r.map.toString());
|
||||
}
|
||||
return r.css;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = OptimizeCssAssetsWebpackPlugin;
|
||||
Reference in New Issue
Block a user