@@ -20,30 +20,36 @@ class VuetifyLoaderPlugin {
2020 // use webpack's RuleSet utility to normalize user rules
2121 const rawRules = compiler . options . module . rules
2222 const { rules } = new RuleSet ( rawRules )
23+ this . rules = rules
2324
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 ) )
2727
28- if ( ! vueRule ) {
28+ if ( ! vueRules . length ) {
2929 throw new Error (
3030 `[VuetifyLoaderPlugin Error] No matching rule for vue-loader found.\n` +
3131 `Make sure there is at least one root-level rule that uses vue-loader.`
3232 )
3333 }
3434
35+ vueRules . forEach ( this . updateRule . bind ( this ) )
36+
37+ compiler . options . module . rules = rules
38+ }
39+
40+ updateRule ( rule ) {
3541 if ( this . options . progressiveImages ) {
36- const vueLoaderOptions = vueRule . use . find ( isVueLoader ) . options
42+ const vueLoaderOptions = rule . use . find ( isVueLoader ) . options
3743 vueLoaderOptions . compilerOptions = vueLoaderOptions . compilerOptions || { }
3844 vueLoaderOptions . compilerOptions . modules = vueLoaderOptions . compilerOptions . modules || [ ]
3945 vueLoaderOptions . compilerOptions . modules . push ( progressiveLoaderModule )
4046
41- const imageRuleIndex = rules . findIndex ( rule => {
47+ const imageRuleIndex = this . rules . findIndex ( rule => {
4248 return rule . resource &&
4349 ! rule . resourceQuery &&
4450 [ '.png' , '.jpg' , '.jpeg' , '.gif' ] . some ( ext => rule . resource ( ext ) )
4551 } )
46- let imageRule = rules [ imageRuleIndex ]
52+ let imageRule = this . rules [ imageRuleIndex ]
4753
4854 const options = typeof this . options . progressiveImages === 'boolean'
4955 ? undefined
@@ -118,10 +124,10 @@ class VuetifyLoaderPlugin {
118124 }
119125 }
120126
121- vueRule . oneOf = [
127+ rule . oneOf = [
122128 {
123129 resourceQuery : '?' ,
124- use : vueRule . use
130+ use : rule . use
125131 } ,
126132 {
127133 use : [
@@ -132,13 +138,11 @@ class VuetifyLoaderPlugin {
132138 attrsMatch : this . options . attrsMatch || [ ]
133139 }
134140 } ,
135- ...vueRule . use
141+ ...rule . use
136142 ]
137143 } ,
138144 ]
139- delete vueRule . use
140-
141- compiler . options . module . rules = rules
145+ delete rule . use
142146 }
143147}
144148
0 commit comments