Skip to content

Commit

Permalink
Support webpack v4 new plugin API
Browse files Browse the repository at this point in the history
  • Loading branch information
NMFR committed Mar 4, 2018
1 parent 72f58a3 commit a922e30
Show file tree
Hide file tree
Showing 5 changed files with 103 additions and 101 deletions.
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@ Using npm:
$ npm install --save-dev optimize-css-assets-webpack-plugin
```

> :warning: For webpack v3 or below please use `optimize-css-assets-webpack-plugin@3.2.0`. The `optimize-css-assets-webpack-plugin@4.0.0` version and above supports webpack v4.
## Configuration:

The plugin can receive the following options (all of them are optional):
Expand Down
76 changes: 0 additions & 76 deletions index.js

This file was deleted.

53 changes: 30 additions & 23 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@
"description": "A Webpack plugin to optimize \\ minimize CSS assets.",
"dependencies": {
"cssnano": "^3.4.0",
"last-call-webpack-plugin": "^2.1.2"
"last-call-webpack-plugin": "^3.0.0"
},
"main": "index.js",
"main": "src/index.js",
"homepage": "http://github.com/NMFR/optimize-css-assets-webpack-plugin",
"repository": {
"type": "git",
Expand Down
69 changes: 69 additions & 0 deletions src/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
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.source();
const processOptions = Object.assign(
{ from: assetName, to: assetName },
this.options.cssProcessorOptions || {}
);

if (processOptions.map && !processOptions.map.prev) {
try {
const mapJson = assets.getAsset(assetName + '.map');
if (mapJson) {
const 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;
});
}
}

module.exports = OptimizeCssAssetsWebpackPlugin;

0 comments on commit a922e30

Please sign in to comment.