Skip to content

Commit 839f878

Browse files
authored
fix(utils): fix: some options had no effect with webpack5 (#460)
ruleSet.exec({resource: '.svg'})` was used to find `svg-sprite-loader` options object But this approach does not work if we define a rule with something like `test: /svg-sprites.*?\.svg/` ISSUES CLOSED: #446
1 parent ade0adf commit 839f878

File tree

1 file changed

+16
-52
lines changed

1 file changed

+16
-52
lines changed

lib/utils/get-matched-rule-5.js

Lines changed: 16 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -2,62 +2,26 @@
22
/* eslint-disable import/no-unresolved */
33
/* eslint-disable no-restricted-syntax */
44
// eslint-disable-next-line import/no-extraneous-dependencies
5-
const BasicEffectRulePlugin = require('webpack/lib/rules/BasicEffectRulePlugin');
6-
const BasicMatcherRulePlugin = require('webpack/lib/rules/BasicMatcherRulePlugin');
7-
const RuleSetCompiler = require('webpack/lib/rules/RuleSetCompiler');
8-
const DescriptionDataMatcherRulePlugin = require('webpack/lib/rules/DescriptionDataMatcherRulePlugin');
9-
const UseEffectRulePlugin = require('webpack/lib/rules/UseEffectRulePlugin');
105

11-
const ruleSetCompiler = new RuleSetCompiler([
12-
new BasicMatcherRulePlugin('test', 'resource'),
13-
new BasicMatcherRulePlugin('include', 'resource'),
14-
new BasicMatcherRulePlugin('exclude', 'resource', true),
15-
new BasicMatcherRulePlugin('resource'),
16-
new BasicMatcherRulePlugin('conditions'),
17-
new BasicMatcherRulePlugin('resourceQuery'),
18-
new BasicMatcherRulePlugin('realResource'),
19-
new BasicMatcherRulePlugin('issuer'),
20-
new BasicMatcherRulePlugin('compiler'),
21-
new BasicEffectRulePlugin('type'),
22-
new BasicEffectRulePlugin('sideEffects'),
23-
new BasicEffectRulePlugin('parser'),
24-
new BasicEffectRulePlugin('resolve'),
25-
new BasicEffectRulePlugin('generator'),
26-
new DescriptionDataMatcherRulePlugin(),
27-
new UseEffectRulePlugin()
28-
]);
29-
30-
// const RuleSet = require('webpack/lib/RuleSet');
31-
32-
const flattenAndExtractUse = rules => rules.reduce((pre, rule) => {
33-
// if ('rules' in rule || 'oneOf' in rule) {
34-
// return pre.concat(flattenAndExtractUse(rule.rules || rule.oneOf));
35-
// }
36-
return pre.concat(rule || []);
37-
}, []);
6+
const isSpriteLoader = (rule) => {
7+
if (!Object.prototype.hasOwnProperty.call(rule, 'loader')) return false;
8+
return /svg-sprite-loader/.test(rule.loader);
9+
};
3810

3911
module.exports = (compiler) => {
4012
const rawRules = compiler.options.module.rules;
41-
const rulesUse = [];
13+
let spriteLoader = null;
4214
for (const rawRule of rawRules) {
43-
const clonedRawRule = Object.assign({}, rawRule);
44-
delete clonedRawRule.include;
45-
const ruleSet = ruleSetCompiler.compile([{
46-
rules: [clonedRawRule]
47-
}]);
48-
rulesUse.push(ruleSet.exec({
49-
resource: '.svg'
50-
}));
15+
if (isSpriteLoader(rawRule)) {
16+
spriteLoader = rawRule;
17+
} else if (Object.prototype.hasOwnProperty.call(rawRule, 'use')) {
18+
for (const subLoader of rawRule.use) {
19+
if (isSpriteLoader(subLoader)) {
20+
spriteLoader = subLoader;
21+
}
22+
}
23+
}
24+
if (spriteLoader !== null) break;
5125
}
52-
53-
// const {
54-
// rules
55-
// } = ruleSet;
56-
57-
const rule = flattenAndExtractUse(rulesUse)
58-
.find((item) => {
59-
return /svg-sprite-loader/.test(item.value.loader);
60-
}) || {};
61-
62-
return rule.value ? rule.value.options : {};
26+
return (spriteLoader !== null && spriteLoader.options !== undefined) ? spriteLoader.options : {};
6327
};

0 commit comments

Comments
 (0)