12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- var LastCallWebpackPlugin = require('last-call-webpack-plugin');
- function OptimizeCssAssetsPlugin(options) {
- this.options = options || {};
- if (this.options.assetNameRegExp === undefined) {
- this.options.assetNameRegExp = /\.css$/g;
- }
- if (this.options.cssProcessor === undefined) {
- this.options.cssProcessor = require('cssnano');
- }
- if (this.options.cssProcessorOptions === undefined) {
- this.options.cssProcessorOptions = {};
- }
- if (this.options.canPrint === undefined) {
- this.options.canPrint = true;
- }
- var self = this;
- this.lastCallInstance = new LastCallWebpackPlugin({
- assetProcessors: [
- {
- phase: LastCallWebpackPlugin.PHASE.OPTIMIZE_CHUNK_ASSETS,
- regExp: this.options.assetNameRegExp,
- processor: function (assetName, asset, assets) {
- return self.processCss(assetName, asset, assets);
- },
- }
- ],
- canPrint: this.options.canPrint
- });
- };
- OptimizeCssAssetsPlugin.prototype.processCss = function(assetName, asset, assets) {
- var css = asset.source();
- var processOptions = Object.assign(
- { from: assetName, to: assetName },
- this.options.cssProcessorOptions || {}
- );
- if (processOptions.map && !processOptions.map.prev) {
- try {
- var mapJson = assets.getAsset(assetName + '.map');
- if (mapJson) {
- var map = JSON.parse(mapJson);
- if (
- map &&
- (
- (map.sources && map.sources.length > 0) ||
- (map.mappings && map.mappings.length > 0)
- )
- ) {
- processOptions.map = Object.assign({ prev: mapJson }, processOptions.map);
- }
- }
- } catch (err) {
- console.warn('OptimizeCssAssetsPlugin.processCss() Error getting previous source map', err);
- }
- }
- return this.options
- .cssProcessor.process(css, processOptions)
- .then(r => {
- if (processOptions.map && r.map && r.map.toString) {
- assets.setAsset(assetName + '.map', r.map.toString());
- }
- return r.css;
- });
- };
- OptimizeCssAssetsPlugin.prototype.apply = function(compiler) {
- return this.lastCallInstance.apply(compiler);
- };
- module.exports = OptimizeCssAssetsPlugin;
|