Skip to content

Commit 2956b94

Browse files
committed
feat: Add support for css-loader 2
BREAKING CHANGE: CSS modules are only supported with css-loader >= 2.x
1 parent 1749010 commit 2956b94

File tree

10 files changed

+12805
-97
lines changed

10 files changed

+12805
-97
lines changed

example/default/dist/bundle.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

example/default/dist/styles.css

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
1-
@font-face { font-family: Ef1877; src:url(data:application/x-font-woff;charset=utf-8;base64,d09GRgABAAAAAAQ8AAsAAAAABlQAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABHU1VCAAABCAAAADsAAABUIIslek9TLzIAAAFEAAAAPwAAAFY2IECvY21hcAAAAYQAAABKAAABcOEoo6pnbHlmAAAB0AAAAKkAAACs+Z1drGhlYWQAAAJ8AAAAMAAAADYRnnKeaGhlYQAAAqwAAAAYAAAAJAfIA+tobXR4AAACxAAAAAgAAAAIA+gAAGxvY2EAAALMAAAABgAAAAYAVgAAbWF4cAAAAtQAAAAgAAAAIAEPAERuYW1lAAAC9AAAASkAAAIWm5e+CnBvc3QAAAQgAAAAGwAAACxqQQEEeJxjYGRgYOBiMGCwY2BycfMJYeDLSSzJY5BiYGGAAJA8MpsxJzM9kYEDxgPKsYBpDiBmg4gCACY7BUgAeJxjYGT8wjiBgZWBgamKaQ8DA0MPhGZ8wGDIyAQUZWBlZsAKAtJcUxgcHjA8YGB+AeRGAUlGIA3CDAABXgs9AHic7ZCxDYAwEAPPykOBGIEqNbNQsb/YJPkY2CKWzpJPXz2wACU5kwDdiJErrewLm31QfRPDP7T2d+5wo5WZ3X18y796QR0aJglRAAB4nBXLQQqCQBTG8fcaMsK3eIHNRGBTRrooCNQUIj1G4A26SB3CExS07xC2dN/SW4yN8PFf/T4QAH0vfqKGJUSQA2Dg+BiFwQQdT8b5FGWcpUecpeF2jHNvhckmLrHAXRJLHz1nj0FYYJoJZNnQmkxJShM+8UVauQ/J5msqfdKjm42hmqXkIaJW/Glc11yss95caaHpjgdWb1O1Ftu1Z8Xd8OhYwR+ErCSFAAAAeJxjYGRgYADiTR5fIuP5bb4ycDO/AIowXA8QF0DQ//8z32eeBeRyMDCBRAE8ewsCeJxjYGRgYH7BwAAn7zMwMqACJgBEkQK9AAAAAAPoAAAAAAAAAFYAAAABAAAAAgA4AAMAAAAAAAIAAAAKAAoAAAD/AAAAAAAAeJxlkD1uwkAUhMdgSAJSghQpKbNVCiKZn5IDQE9Bl8KYtTGyvdZ6QaLLCXKEHCGniHKCHChj82hgLT9/M2/e7soABviFh3p5uG1qvVq4oTpxm/Qg7JOfhTvo40W4S38o3MMbpsJ9POKdO3j+HZ0BSuEW7vEh3Kb/KeyTv4Q7eMK3cJf+j3APK/wJ9/HqDdPIFLEp3FIn+yy0Z3n+rrStUlOoSTA+WwtdaBs6vVHro6oOydS5WMXW5GrOrs4yo0prdjpywda5cjYaxeIHkcmRIoJBgbipDktoJNgjQwh71b3UK6YtKvq1VpggwPgqtWCqaJIhlcaGyTWOrBUOPG1K1zGt+FrO5KS5zGreJCMr/u+6t6MT0Q+wbaZKzDDiE1/kg+YO+T89EV6oAAAAeJxjYGKAAC4G7ICJkYmRmYEp04CBAQAEbQCxAA==) format('woff');font-weight: normal;font-style: normal;}
1+
@font-face { font-family: Ef1877; src:url(data:application/x-font-woff;charset=utf-8;base64,d09GRgABAAAAAARAAAsAAAAABlQAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABHU1VCAAABCAAAADsAAABUIIslek9TLzIAAAFEAAAAPwAAAFY2IECvY21hcAAAAYQAAABKAAABcOEoo6pnbHlmAAAB0AAAAKkAAACs+Z1drGhlYWQAAAJ8AAAAMQAAADYVRG5eaGhlYQAAArAAAAAYAAAAJAfIA+tobXR4AAACyAAAAAgAAAAIA+gAAGxvY2EAAALQAAAABgAAAAYAVgAAbWF4cAAAAtgAAAAgAAAAIAEPAERuYW1lAAAC+AAAASkAAAIWm5e+CnBvc3QAAAQkAAAAGwAAACxqQQEEeJxjYGRgYOBiMGCwY2BycfMJYeDLSSzJY5BiYGGAAJA8MpsxJzM9kYEDxgPKsYBpDiBmg4gCACY7BUgAeJxjYGT8wjiBgZWBgamKaQ8DA0MPhGZ8wGDIyAQUZWBlZsAKAtJcUxgcHjA8YGB+AeRGAUlGIA3CDAABXgs9AHic7ZCxDYAwEAPPykOBGIEqNbNQsb/YJPkY2CKWzpJPXz2wACU5kwDdiJErrewLm31QfRPDP7T2d+5wo5WZ3X18y796QR0aJglRAAB4nBXLQQqCQBTG8fcaMsK3eIHNRGBTRrooCNQUIj1G4A26SB3CExS07xC2dN/SW4yN8PFf/T4QAH0vfqKGJUSQA2Dg+BiFwQQdT8b5FGWcpUecpeF2jHNvhckmLrHAXRJLHz1nj0FYYJoJZNnQmkxJShM+8UVauQ/J5msqfdKjm42hmqXkIaJW/Glc11yss95caaHpjgdWb1O1Ftu1Z8Xd8OhYwR+ErCSFAAAAeJxjYGRgYADiVX/+3Iznt/nKwM38AijCcFNZ5AOC/v+f+T7zLCCXg4EJJAoAkN0NmgAAAHicY2BkYGB+wcAAJ+8zMDKgAiYARJECvQAAAAAD6AAAAAAAAABWAAAAAQAAAAIAOAADAAAAAAACAAAACgAKAAAA/wAAAAAAAHicZZA9bsJAFITHYEgCUoIUKSmzVQoimZ+SA0BPQZfCmLUxsr3WekGiywlyhBwhp4hyghwoY/NoYC0/fzNv3u7KAAb4hYd6ebhtar1auKE6cZv0IOyTn4U76ONFuEt/KNzDG6bCfTzinTt4/h2dAUrhFu7xIdym/ynsk7+EO3jCt3CX/o9wDyv8Cffx6g3TyBSxKdxSJ/sstGd5/q60rVJTqEkwPlsLXWgbOr1R66OqDsnUuVjF1uRqzq7OMqNKa3Y6csHWuXI2GsXiB5HJkSKCQYG4qQ5LaCTYI0MIe9W91CumLSr6tVaYIMD4KrVgqmiSIZXGhsk1jqwVDjxtStcxrfhazuSkucxq3iQjK/7vurejE9EPsG2mSsww4hNf5IPmDvk/PRFeqAAAAHicY2BigAAuBuyAiZGJkZmBKdOAgQEABG0AsQA=) format('woff');font-weight: normal;font-style: normal;}
22

33
a:before {
44
text-rendering: auto;
55
-webkit-font-smoothing: antialiased;
66
-moz-osx-font-smoothing: grayscale;
77
font-family: Ef1877;
88
font-weight: normal;
9-
content: '\E000';
9+
content: '\e000';
1010
transition: 0.5s color;
1111
}
1212

@@ -19,5 +19,6 @@ a:after {
1919
-webkit-font-smoothing: antialiased;
2020
-moz-osx-font-smoothing: grayscale;
2121
font: normal normal normal 50%/1 Ef1877;
22-
content: '\E000';
22+
content: '\e000';
2323
}
24+

example/default/webpack.config.js

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
var path = require('path');
22
var IconfontWebpackPlugin = require('../../');
3-
var ExtractTextPlugin = require('extract-text-webpack-plugin');
3+
var MiniCssExtractPlugin = require('mini-css-extract-plugin');
44

55
module.exports = {
66
entry: './example.js',
@@ -12,25 +12,23 @@ module.exports = {
1212
module: {
1313
rules: [
1414
{ test: /\.css$/,
15-
use: ExtractTextPlugin.extract({
16-
fallback: 'style-loader',
17-
use: [
18-
'css-loader',
19-
{
20-
loader: 'postcss-loader',
21-
options: {
22-
plugins: (loader) => [
23-
new IconfontWebpackPlugin(loader)
24-
]
25-
}
15+
use: [
16+
MiniCssExtractPlugin.loader,
17+
'css-loader',
18+
{
19+
loader: 'postcss-loader',
20+
options: {
21+
plugins: (loader) => [
22+
new IconfontWebpackPlugin(loader)
23+
]
2624
}
27-
]
28-
})
25+
}
26+
]
2927
}
3028
]
3129
},
3230
plugins: [
33-
new ExtractTextPlugin('styles.css')
31+
new MiniCssExtractPlugin({ filename: 'styles.css' })
3432
]
3533
};
3634

example/module/dist/bundle.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

example/module/dist/styles.css

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
1-
@font-face { font-family: Jb5067; src:url(data:application/x-font-woff;charset=utf-8;base64,d09GRgABAAAAAARcAAsAAAAABmwAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABHU1VCAAABCAAAADsAAABUIIslek9TLzIAAAFEAAAAQQAAAFY2IEBzY21hcAAAAYgAAABKAAABcOEoo6pnbHlmAAAB1AAAALoAAADEtSXUXWhlYWQAAAKQAAAAMQAAADYRhXM6aGhlYQAAAsQAAAAfAAAAJAewA8RobXR4AAAC5AAAAAgAAAAIA8T//2xvY2EAAALsAAAABgAAAAYAYgAAbWF4cAAAAvQAAAAeAAAAIAENAEtuYW1lAAADFAAAASkAAAIWm5e+CnBvc3QAAARAAAAAGwAAACxqQQEEeJxjYGRgYOBiMGCwY2BycfMJYeDLSSzJY5BiYGGAAJA8MpsxJzM9kYEDxgPKsYBpDiBmg4gCACY7BUgAeJxjYGR8xDiBgZWBgSmZaQ8DA0MPhGZ8wGDIyAQUZWBlZsAKAtJcUxgcHjA8YGB+AeRGMb9hYATSIMwAAO7jCwEAAAB4nO2QsQ2AMBADz8pDgRiBKjWzULG/2CT5GNgils6ST189sAAlOZMA3YiRK63sC5t9UH0Twz+09nfucKOVmd19fMu/ekEdGiYJUQAAeJwliFEOwTAch/tf202tWlZtbSYbEvGEbWJvk8wjD47gABLx6gYu4iou4w4M3y/5fsmH4N2An/iFKoSyTfnbFv7nFOUSyqLczH69AmusSUCC9VwJbiOcOOYbPUqF1DqKAqNCqS/nKmZDTjuEQIsJNRjt8vlqOo1Z4GPiuS1fqvHIXFmbM05dqvvFos6qVHR9iR2C97f4MMnXXFk9DLTPmRKBeBSkqzo6lAZOaX0/tkXPRskYfQA5xxr5AAB4nGNgZGBgAGLrM6w74/ltvjJwM78AijBcDxA3hdH/gYD5OPMbIJeDgQkkCgBRKg0CAAAAeJxjYGRgYH7BAATMR/7///+X+TgDIwMqYAIAmMEGewAAAAAAA8T//wAAAAAAYgAAeJxjYGRgYGBisGcA0SAWAwMXEDIw/AfzGQAOvgFZAAB4nGWQPW7CQBSEx2BIAlKCFCkps1UKIpmfkgNAT0GXwpi1MbK91npBossJcoQcIaeIcoIcKGPzaGAtP38zb97uygAG+IWHenm4bWq9WrihOnGb9CDsk5+FO+jjRbhLfyjcwxumwn084p07eP4dnQFK4Rbu8SHcpv8p7JO/hDt4wrdwl/6PcA8r/An38eoN08gUsSncUif7LLRnef6utK1SU6hJMD5bC11oGzq9Ueujqg7J1LlYxdbkas6uzjKjSmt2OnLB1rlyNhrF4geRyZEigkGBuKkOS2gk2CNDCHvVvdQrpi0q+rVWmCDA+Cq1YKpokiGVxobJNY6sFQ48bUrXMa34Ws7kpLnMat4kIyv+77q3oxPRD7BtpkrMMOITX+SD5g75Pz0RXqgAAAB4nGNgYoAALgbsgImRiZGZgSnTgIEBAARtALEA) format('woff');font-weight: normal;font-style: normal;}
1+
@font-face { font-family: Jb5067; src:url(data:application/x-font-woff;charset=utf-8;base64,d09GRgABAAAAAARcAAsAAAAABmwAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABHU1VCAAABCAAAADsAAABUIIslek9TLzIAAAFEAAAAQQAAAFY2IEBzY21hcAAAAYgAAABKAAABcOEoo6pnbHlmAAAB1AAAALoAAADEtSXUXWhlYWQAAAKQAAAAMQAAADYVK3GgaGhlYQAAAsQAAAAfAAAAJAewA8RobXR4AAAC5AAAAAgAAAAIA8T//2xvY2EAAALsAAAABgAAAAYAYgAAbWF4cAAAAvQAAAAeAAAAIAENAEtuYW1lAAADFAAAASkAAAIWm5e+CnBvc3QAAARAAAAAGwAAACxqQQEEeJxjYGRgYOBiMGCwY2BycfMJYeDLSSzJY5BiYGGAAJA8MpsxJzM9kYEDxgPKsYBpDiBmg4gCACY7BUgAeJxjYGR8xDiBgZWBgSmZaQ8DA0MPhGZ8wGDIyAQUZWBlZsAKAtJcUxgcHjA8YGB+AeRGMb9hYATSIMwAAO7jCwEAAAB4nO2QsQ2AMBADz8pDgRiBKjWzULG/2CT5GNgils6ST189sAAlOZMA3YiRK63sC5t9UH0Twz+09nfucKOVmd19fMu/ekEdGiYJUQAAeJwliFEOwTAch/tf202tWlZtbSYbEvGEbWJvk8wjD47gABLx6gYu4iou4w4M3y/5fsmH4N2An/iFKoSyTfnbFv7nFOUSyqLczH69AmusSUCC9VwJbiOcOOYbPUqF1DqKAqNCqS/nKmZDTjuEQIsJNRjt8vlqOo1Z4GPiuS1fqvHIXFmbM05dqvvFos6qVHR9iR2C97f4MMnXXFk9DLTPmRKBeBSkqzo6lAZOaX0/tkXPRskYfQA5xxr5AAB4nGNgZGBgAGKTBo638fw2Xxm4mV8ARRhuKotlwOj/QMB8nPkNkMvBwAQSBQBMZAz0AAAAeJxjYGRgYH7BAATMR/7///+X+TgDIwMqYAIAmMEGewAAAAAAA8T//wAAAAAAYgAAeJxjYGRgYGBisGcA0SAWAwMXEDIw/AfzGQAOvgFZAAB4nGWQPW7CQBSEx2BIAlKCFCkps1UKIpmfkgNAT0GXwpi1MbK91npBossJcoQcIaeIcoIcKGPzaGAtP38zb97uygAG+IWHenm4bWq9WrihOnGb9CDsk5+FO+jjRbhLfyjcwxumwn084p07eP4dnQFK4Rbu8SHcpv8p7JO/hDt4wrdwl/6PcA8r/An38eoN08gUsSncUif7LLRnef6utK1SU6hJMD5bC11oGzq9Ueujqg7J1LlYxdbkas6uzjKjSmt2OnLB1rlyNhrF4geRyZEigkGBuKkOS2gk2CNDCHvVvdQrpi0q+rVWmCDA+Cq1YKpokiGVxobJNY6sFQ48bUrXMa34Ws7kpLnMat4kIyv+77q3oxPRD7BtpkrMMOITX+SD5g75Pz0RXqgAAAB4nGNgYoAALgbsgImRiZGZgSnTgIEBAARtALEA) format('woff');font-weight: normal;font-style: normal;}
22

33
a:before {
44
text-rendering: auto;
55
-webkit-font-smoothing: antialiased;
66
-moz-osx-font-smoothing: grayscale;
77
font-family: Jb5067;
88
font-weight: normal;
9-
content: '\E000';
9+
content: '\e000';
1010
transition: 0.5s color;
1111
}
1212

@@ -19,5 +19,5 @@ a:after {
1919
-webkit-font-smoothing: antialiased;
2020
-moz-osx-font-smoothing: grayscale;
2121
font: normal normal normal 50%/1 Jb5067;
22-
content: '\E000';
23-
}
22+
content: '\e000';
23+
}

example/module/webpack.config.js

Lines changed: 20 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
var path = require('path');
22
var IconfontWebpackPlugin = require('../../');
3-
var ExtractTextPlugin = require('extract-text-webpack-plugin');
3+
var MiniCssExtractPlugin = require('mini-css-extract-plugin');
44

55
module.exports = {
66
entry: './example.js',
@@ -12,33 +12,30 @@ module.exports = {
1212
module: {
1313
rules: [
1414
{ test: /\.css$/,
15-
use: ExtractTextPlugin.extract({
16-
fallback: 'style-loader',
17-
use: [
18-
{
19-
loader: 'css-loader',
20-
options: {
21-
modules: true
22-
}
23-
},
24-
{
25-
loader: 'postcss-loader',
26-
options: {
27-
plugins: (loader) => [
28-
new IconfontWebpackPlugin({
29-
resolve: loader.resolve,
30-
modules: true
31-
})
32-
]
33-
}
15+
use: [
16+
MiniCssExtractPlugin.loader,
17+
{
18+
loader: 'css-loader',
19+
options: {
20+
modules: true
3421
}
35-
]
36-
})
22+
},
23+
{
24+
loader: 'postcss-loader',
25+
options: {
26+
plugins: (loader) => [
27+
new IconfontWebpackPlugin({
28+
resolve: loader.resolve
29+
})
30+
]
31+
}
32+
}
33+
]
3734
}
3835
]
3936
},
4037
plugins: [
41-
new ExtractTextPlugin('styles.css')
38+
new MiniCssExtractPlugin({ filename: 'styles.css' })
4239
]
4340
};
4441

lib/postcss-plugin.js

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -144,23 +144,19 @@ function replaceIconFontDeclarations (fontName, postCssRoot, svgPaths) {
144144
/**
145145
* @param fontName {string} The name of the font (font-family)
146146
* @param postCssRoot {object} The postCss root object
147-
* @param useCssModules {boolean} wether the css loader is using css-modules or not
148147
* @param enforcedSvgHeight {number} the enforced height of the svg font
149148
* @param svgPaths {object} The svg path information
150149
*/
151-
function addFontDeclaration (fontName, postCssRoot, useCssModules, enforcedSvgHeight, svgPaths) {
150+
function addFontDeclaration (fontName, postCssRoot, enforcedSvgHeight, svgPaths) {
152151
// The options are passed as a query string so we use the relative svg paths to reduce the path length per file
153152
const options = { svgs: svgPaths.relative, name: fontName, enforcedSvgHeight: enforcedSvgHeight };
154-
// Use ~ to tell the loader-utils of the css loader that this is a webpack path
155-
// Unfortunately this works only if the css-loader is not using css modules
156-
const prefix = useCssModules ? '' : '~';
157153
// Resolve the icon font plugin directoy in case the iconfont-webpack-plugin is used as a sub dependency
158154
const iconFontPluginDirectory = path.dirname(require.resolve('../'));
159155
// Use paths always with slash also for win32 to prevent an issues with resolving the placeholder on windows
160156
const iconFontLoaderPath = path.join(iconFontPluginDirectory, 'lib/loader.js').replace(/\\/g, '/');
161157
const iconFontPlaceholderPath = path.join(iconFontPluginDirectory, 'placeholder.svg').replace(/\\/g, '/');
162158
// Use !! to tell webpack that we don't want any other loader to kick in
163-
const url = prefix + '!!' + iconFontLoaderPath + '?' + JSON.stringify(options) + '!' + iconFontPlaceholderPath;
159+
const url = '~!!' + iconFontLoaderPath + '?' + JSON.stringify(options) + '!' + iconFontPlaceholderPath;
164160
postCssRoot.prepend(postcss.parse(
165161
'@font-face { ' +
166162
'font-family: ' + fontName + '; src:url(\'' + url + '\') format(\'woff\');' +
@@ -191,7 +187,7 @@ module.exports = postcss.plugin('iconfont-webpack', config => function (root, re
191187
// Update the css
192188
return Promise.all([
193189
// add the font faces
194-
addFontDeclaration(fontName, root, config.modules, config.enforcedSvgHeight, svgPaths),
190+
addFontDeclaration(fontName, root, config.enforcedSvgHeight, svgPaths),
195191
// replace the `font-icon` occurences
196192
replaceIconFontDeclarations(fontName, root, svgPaths)
197193
]);

0 commit comments

Comments
 (0)