Skip to content

Commit 4781d81

Browse files
refactor: postcss plugins (webpack-contrib#946)
1 parent 6701cbd commit 4781d81

File tree

3 files changed

+53
-37
lines changed

3 files changed

+53
-37
lines changed

src/index.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,8 @@ export default function loader(content, map, meta) {
6262
plugins.push(...getModulesPlugins(options, this));
6363
}
6464

65+
plugins.push(icssParser());
66+
6567
if (options.import !== false) {
6668
plugins.push(
6769
importParser({
@@ -80,8 +82,6 @@ export default function loader(content, map, meta) {
8082
);
8183
}
8284

83-
plugins.push(icssParser());
84-
8585
postcss(plugins)
8686
.process(content, {
8787
from: getRemainingRequest(this)

src/plugins/postcss-url-parser.js

+36-20
Original file line numberDiff line numberDiff line change
@@ -49,38 +49,54 @@ function walkUrls(parsed, callback) {
4949
});
5050
}
5151

52-
function walkDeclsWithUrl(css, result, filter) {
53-
const items = [];
52+
function getUrlsFromValue(value, result, filter, decl = null) {
53+
if (!needParseDecl.test(value)) {
54+
return;
55+
}
56+
57+
const parsed = valueParser(value);
58+
const urls = [];
59+
60+
walkUrls(parsed, (node, url, needQuotes) => {
61+
if (url.trim().replace(/\\[\r\n]/g, '').length === 0) {
62+
result.warn(
63+
`Unable to find uri in '${decl ? decl.toString() : value}'`,
64+
decl
65+
? {
66+
node: decl,
67+
}
68+
: {}
69+
);
5470

55-
css.walkDecls((decl) => {
56-
if (!needParseDecl.test(decl.value)) {
5771
return;
5872
}
5973

60-
const parsed = valueParser(decl.value);
61-
const urls = [];
74+
if (filter && !filter(url)) {
75+
return;
76+
}
6277

63-
walkUrls(parsed, (node, url, needQuotes) => {
64-
if (url.trim().replace(/\\[\r\n]/g, '').length === 0) {
65-
result.warn(`Unable to find uri in '${decl.toString()}'`, {
66-
node: decl,
67-
});
78+
urls.push({ url, needQuotes });
79+
});
6880

69-
return;
70-
}
81+
// eslint-disable-next-line consistent-return
82+
return { parsed, urls };
83+
}
7184

72-
if (filter && !filter(url)) {
73-
return;
74-
}
85+
function walkDeclsWithUrl(css, result, filter) {
86+
const items = [];
7587

76-
urls.push({ url, needQuotes });
77-
});
88+
css.walkDecls((decl) => {
89+
const item = getUrlsFromValue(decl.value, result, filter, decl);
90+
91+
if (!item) {
92+
return;
93+
}
7894

79-
if (urls.length === 0) {
95+
if (item.urls.length === 0) {
8096
return;
8197
}
8298

83-
items.push({ decl, parsed, urls });
99+
items.push({ decl, parsed: item.parsed, urls: item.urls });
84100
});
85101

86102
return items;

test/__snapshots__/modules-option.test.js.snap

+15-15
Original file line numberDiff line numberDiff line change
@@ -8396,64 +8396,64 @@ exports[`modules composes should supports resolving: module (evaluated) 1`] = `
83968396
Array [
83978397
Array [
83988398
2,
8399-
"._2Nehoi0wFTN-8p0fEfvUYd {
8400-
d: d;
8401-
}
8402-
",
8403-
"(min-width: 100px)",
8404-
],
8405-
Array [
8406-
3,
84078399
"
84088400
",
84098401
"",
84108402
],
84118403
Array [
8412-
4,
8404+
3,
84138405
"
84148406
",
84158407
"",
84168408
],
84178409
Array [
8418-
5,
8410+
4,
84198411
"._22ETk3ZhhvjVe-4dAULcsF {
84208412
display: block;
84218413
}
84228414
",
84238415
"",
84248416
],
84258417
Array [
8426-
6,
8418+
5,
84278419
".dSGVakTZ8YY-XNW64tg9F {
84288420
display: inline;
84298421
}
84308422
",
84318423
"",
84328424
],
84338425
Array [
8434-
7,
8426+
6,
84358427
"._1SUuyapRQ82dAPS8r7zmpY {
84368428
display: flex;
84378429
}
84388430
",
84398431
"",
84408432
],
84418433
Array [
8442-
8,
8434+
7,
84438435
"._2n5szs-7uGKzfFTp9NTK64 {
84448436
display: inline-block;
84458437
}
84468438
",
84478439
"",
84488440
],
84498441
Array [
8450-
9,
8442+
8,
84518443
"._37nzOIvIANGnEtP1lWjZDN {
84528444
display: table;
84538445
}
84548446
",
84558447
"",
84568448
],
8449+
Array [
8450+
9,
8451+
"._2Nehoi0wFTN-8p0fEfvUYd {
8452+
d: d;
8453+
}
8454+
",
8455+
"(min-width: 100px)",
8456+
],
84578457
Array [
84588458
1,
84598459
"._14uFt0lIVKKAlKTTT29IIQ {
@@ -8533,14 +8533,14 @@ Array [
85338533
exports[`modules composes should supports resolving: module 1`] = `
85348534
"exports = module.exports = require(\\"../../../src/runtime/api.js\\")(false);
85358535
// Imports
8536-
exports.i(require(\\"-!../../../src/index.js??ref--4-0!./test-other.css\\"), \\"(min-width: 100px)\\");
85378536
exports.i(require(\\"-!../../../src/index.js??ref--4-0!./values.css\\"), \\"\\");
85388537
exports.i(require(\\"-!../../../src/index.js??ref--4-0!./something.css\\"), \\"\\");
85398538
exports.i(require(\\"-!../../../src/index.js??ref--4-0!./imported-simple.css\\"), \\"\\");
85408539
exports.i(require(\\"-!../../../src/index.js??ref--4-0!./relative.css\\"), \\"\\");
85418540
exports.i(require(\\"-!../../../src/index.js??ref--4-0!../modules/top-relative.css\\"), \\"\\");
85428541
exports.i(require(\\"-!../../../src/index.js??ref--4-0!package/style.css\\"), \\"\\");
85438542
exports.i(require(\\"-!../../../src/index.js??ref--4-0!aliasesComposes/alias.css\\"), \\"\\");
8543+
exports.i(require(\\"-!../../../src/index.js??ref--4-0!./test-other.css\\"), \\"(min-width: 100px)\\");
85448544
85458545
// Module
85468546
exports.push([module.id, \\"._14uFt0lIVKKAlKTTT29IIQ {\\\\n color: \\" + require(\\"-!../../../src/index.js??ref--4-0!./values.css\\").locals[\\"v-def\\"] + \\";\\\\n}\\\\n\\\\n._3XDgIzfUIQkaUInpEdo7fN {\\\\n color: blue;\\\\n}\\\\n\\\\n._1wABXM_RabWHj--wsPrhvM {\\\\n display: block;\\\\n}\\\\n\\\\n._1DFEYnAfn9LZyk4fErI86e {\\\\n width: \\" + require(\\"-!../../../src/index.js??ref--4-0!./something.css\\").locals[\\"v-something\\"] + \\";\\\\n}\\\\n\\\\n.Ywv5coVC2RU-pIFhN9O4w {\\\\n color: \\" + require(\\"-!../../../src/index.js??ref--4-0!./values.css\\").locals[\\"v-other\\"] + \\";\\\\n}\\\\n\\\\n._1tAbIwITRWAdZZE6wKNk9O {\\\\n prop: \\" + require(\\"-!../../../src/index.js??ref--4-0!./values.css\\").locals[\\"v-def\\"] + \\";\\\\n duplicate: \\" + require(\\"-!../../../src/index.js??ref--4-0!./values.css\\").locals[\\"v-other\\"] + \\";\\\\n}\\\\n\\\\n.Q3SQ3BwtBwUFLlg6adzOI {\\\\n color: red;\\\\n}\\\\n\\\\n._1n5XhXj4SFnYrwziC3un0d {\\\\n color: yellow;\\\\n}\\\\n\\\\n._3dnFnGkAVAiMA6etF-naHc {\\\\n color: gray;\\\\n}\\\\n\\\\n._1xUePnlnafMQ1cExy3PUWT {\\\\n color: gray;\\\\n}\\\\n\\\\n._26Jdfenl9Xn8HXwb2jipvt {\\\\n color: gainsboro;\\\\n}\\\\n\\\\n._1ya4VhsDkuPhQeVHQydw2Y {\\\\n color: #BF4040;\\\\n}\\\\n\\\\n.sGE1Q_LliVEZU2Q4q9j4K {\\\\n color: black;\\\\n}\\\\n\\\\n@media (min-width: 960px) {\\\\n ._2zSMJ4hQh0FesbZjiKW_ya {\\\\n padding: 0 20px;\\\\n }\\\\n}\\\\n\\\\n.\\" + require(\\"-!../../../src/index.js??ref--4-0!./values.css\\").locals[\\"s-white\\"] + \\" {\\\\n color: white;\\\\n}\\\\n\\\\n@media \\" + require(\\"-!../../../src/index.js??ref--4-0!./values.css\\").locals[\\"m-small\\"] + \\" {\\\\n ._2zSMJ4hQh0FesbZjiKW_ya {\\\\n padding: 20px 20px;\\\\n }\\\\n}\\\\n\\", \\"\\"]);

0 commit comments

Comments
 (0)