|
2 | 2 | /* eslint-disable import/no-unresolved */
|
3 | 3 | /* eslint-disable no-restricted-syntax */
|
4 | 4 | // 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'); |
10 | 5 |
|
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 | +}; |
38 | 10 |
|
39 | 11 | module.exports = (compiler) => {
|
40 | 12 | const rawRules = compiler.options.module.rules;
|
41 |
| - const rulesUse = []; |
| 13 | + let spriteLoader = null; |
42 | 14 | 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; |
51 | 25 | }
|
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 : {}; |
63 | 27 | };
|
0 commit comments