diff options
| author | ruki <waruqi@gmail.com> | 2018-11-08 00:38:48 +0800 |
|---|---|---|
| committer | ruki <waruqi@gmail.com> | 2018-11-07 21:53:09 +0800 |
| commit | 26105034da4fcce7ac883c899d781f016559310d (patch) | |
| tree | c459a5dc4e3aa0972d9919033ece511ce76dd129 /node_modules/optimize-css-assets-webpack-plugin/src | |
| parent | 2c77f00f1a7ecb6c8192f9c16d3b2001b254a107 (diff) | |
| download | xmake-docs-26105034da4fcce7ac883c899d781f016559310d.tar.gz xmake-docs-26105034da4fcce7ac883c899d781f016559310d.zip | |
switch to vuepress
Diffstat (limited to 'node_modules/optimize-css-assets-webpack-plugin/src')
| -rw-r--r-- | node_modules/optimize-css-assets-webpack-plugin/src/index.js | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/node_modules/optimize-css-assets-webpack-plugin/src/index.js b/node_modules/optimize-css-assets-webpack-plugin/src/index.js new file mode 100644 index 00000000..4cfb8a50 --- /dev/null +++ b/node_modules/optimize-css-assets-webpack-plugin/src/index.js @@ -0,0 +1,72 @@ +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$/g, + processor: (assetName, asset, assets) => + this.processCss(assetName, asset, assets), + } + ], + canPrint: options && options.canPrint, + }); + + this.options.assetNameRegExp = !options || !options.assetNameRegExp ? + /\.css$/g : + options.assetNameRegExp; + this.options.cssProcessor = !options || !options.cssProcessor ? + require('cssnano') : + options.cssProcessor; + this.options.cssProcessorOptions = !options || options.cssProcessorOptions === undefined ? + {} : + options.cssProcessorOptions; + } + + buildPluginDescriptor() { + return { name: 'OptimizeCssAssetsWebpackPlugin' }; + } + + processCss(assetName, asset, assets) { + 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(assetName + '.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) + .then(r => { + if (processOptions.map && r.map && r.map.toString) { + assets.setAsset(assetName + '.map', r.map.toString()); + } + return r.css; + }); + } +} + +module.exports = OptimizeCssAssetsWebpackPlugin; |
