|
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