@@ -20,30 +20,36 @@ class VuetifyLoaderPlugin {
20
20
// use webpack's RuleSet utility to normalize user rules
21
21
const rawRules = compiler . options . module . rules
22
22
const { rules } = new RuleSet ( rawRules )
23
+ this . rules = rules
23
24
24
- // find the rule that applies to vue files
25
- const vueRuleIndex = rules . findIndex ( rule => rule . use && rule . use . find ( isVueLoader ) )
26
- const vueRule = rules [ vueRuleIndex ]
25
+ // find the rules that apply to vue files
26
+ const vueRules = rules . filter ( rule => rule . use && rule . use . find ( isVueLoader ) )
27
27
28
- if ( ! vueRule ) {
28
+ if ( ! vueRules . length ) {
29
29
throw new Error (
30
30
`[VuetifyLoaderPlugin Error] No matching rule for vue-loader found.\n` +
31
31
`Make sure there is at least one root-level rule that uses vue-loader.`
32
32
)
33
33
}
34
34
35
+ vueRules . forEach ( this . updateRule . bind ( this ) )
36
+
37
+ compiler . options . module . rules = rules
38
+ }
39
+
40
+ updateRule ( rule ) {
35
41
if ( this . options . progressiveImages ) {
36
- const vueLoaderOptions = vueRule . use . find ( isVueLoader ) . options
42
+ const vueLoaderOptions = rule . use . find ( isVueLoader ) . options
37
43
vueLoaderOptions . compilerOptions = vueLoaderOptions . compilerOptions || { }
38
44
vueLoaderOptions . compilerOptions . modules = vueLoaderOptions . compilerOptions . modules || [ ]
39
45
vueLoaderOptions . compilerOptions . modules . push ( progressiveLoaderModule )
40
46
41
- const imageRuleIndex = rules . findIndex ( rule => {
47
+ const imageRuleIndex = this . rules . findIndex ( rule => {
42
48
return rule . resource &&
43
49
! rule . resourceQuery &&
44
50
[ '.png' , '.jpg' , '.jpeg' , '.gif' ] . some ( ext => rule . resource ( ext ) )
45
51
} )
46
- let imageRule = rules [ imageRuleIndex ]
52
+ let imageRule = this . rules [ imageRuleIndex ]
47
53
48
54
const options = typeof this . options . progressiveImages === 'boolean'
49
55
? undefined
@@ -118,10 +124,10 @@ class VuetifyLoaderPlugin {
118
124
}
119
125
}
120
126
121
- vueRule . oneOf = [
127
+ rule . oneOf = [
122
128
{
123
129
resourceQuery : '?' ,
124
- use : vueRule . use
130
+ use : rule . use
125
131
} ,
126
132
{
127
133
use : [
@@ -132,13 +138,11 @@ class VuetifyLoaderPlugin {
132
138
attrsMatch : this . options . attrsMatch || [ ]
133
139
}
134
140
} ,
135
- ...vueRule . use
141
+ ...rule . use
136
142
]
137
143
} ,
138
144
]
139
- delete vueRule . use
140
-
141
- compiler . options . module . rules = rules
145
+ delete rule . use
142
146
}
143
147
}
144
148
0 commit comments