Skip to content

Commit a922e30

Browse files
committed
Support webpack v4 new plugin API
1 parent 72f58a3 commit a922e30

File tree

5 files changed

+103
-101
lines changed

5 files changed

+103
-101
lines changed

README.md

+2
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ Using npm:
1717
$ npm install --save-dev optimize-css-assets-webpack-plugin
1818
```
1919

20+
> :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.
21+
2022
## Configuration:
2123

2224
The plugin can receive the following options (all of them are optional):

index.js

-76
This file was deleted.

package-lock.json

+30-23
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@
55
"description": "A Webpack plugin to optimize \\ minimize CSS assets.",
66
"dependencies": {
77
"cssnano": "^3.4.0",
8-
"last-call-webpack-plugin": "^2.1.2"
8+
"last-call-webpack-plugin": "^3.0.0"
99
},
10-
"main": "index.js",
10+
"main": "src/index.js",
1111
"homepage": "http://github.com/NMFR/optimize-css-assets-webpack-plugin",
1212
"repository": {
1313
"type": "git",

src/index.js

+69
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
const LastCallWebpackPlugin = require('last-call-webpack-plugin');
2+
3+
class OptimizeCssAssetsWebpackPlugin extends LastCallWebpackPlugin {
4+
constructor(options) {
5+
super({
6+
assetProcessors: [
7+
{
8+
phase: LastCallWebpackPlugin.PHASES.OPTIMIZE_CHUNK_ASSETS,
9+
regExp: (options && options.assetNameRegExp) || /\.css$/g,
10+
processor: (assetName, asset, assets) =>
11+
this.processCss(assetName, asset, assets),
12+
}
13+
],
14+
canPrint: options && options.canPrint,
15+
});
16+
17+
this.options.assetNameRegExp = !options || !options.assetNameRegExp ?
18+
/\.css$/g :
19+
options.assetNameRegExp;
20+
this.options.cssProcessor = !options || !options.cssProcessor ?
21+
require('cssnano') :
22+
options.cssProcessor;
23+
this.options.cssProcessorOptions = !options || options.cssProcessorOptions === undefined ?
24+
{} :
25+
options.cssProcessorOptions;
26+
}
27+
28+
buildPluginDescriptor() {
29+
return { name: 'OptimizeCssAssetsWebpackPlugin' };
30+
}
31+
32+
processCss(assetName, asset, assets) {
33+
const css = asset.source();
34+
const processOptions = Object.assign(
35+
{ from: assetName, to: assetName },
36+
this.options.cssProcessorOptions || {}
37+
);
38+
39+
if (processOptions.map && !processOptions.map.prev) {
40+
try {
41+
const mapJson = assets.getAsset(assetName + '.map');
42+
if (mapJson) {
43+
const map = JSON.parse(mapJson);
44+
if (
45+
map &&
46+
(
47+
(map.sources && map.sources.length > 0) ||
48+
(map.mappings && map.mappings.length > 0)
49+
)
50+
) {
51+
processOptions.map = Object.assign({ prev: mapJson }, processOptions.map);
52+
}
53+
}
54+
} catch (err) {
55+
console.warn('OptimizeCssAssetsPlugin.processCss() Error getting previous source map', err);
56+
}
57+
}
58+
return this.options
59+
.cssProcessor.process(css, processOptions)
60+
.then(r => {
61+
if (processOptions.map && r.map && r.map.toString) {
62+
assets.setAsset(assetName + '.map', r.map.toString());
63+
}
64+
return r.css;
65+
});
66+
}
67+
}
68+
69+
module.exports = OptimizeCssAssetsWebpackPlugin;

0 commit comments

Comments
 (0)