@@ -67,7 +67,10 @@ class VueLoaderPlugin implements webpack.Plugin {
6767 const templateCompilerRule = {
6868 loader : require . resolve ( './templateLoader' ) ,
6969 test : / \. v u e $ / ,
70- resourceQuery : isVueTemplateBlock ,
70+ resourceQuery : ( query : string ) => {
71+ const parsed = qs . parse ( query . slice ( 1 ) )
72+ return parsed . vue != null && parsed . type === 'template'
73+ } ,
7174 options : vueLoaderOptions
7275 }
7376
@@ -154,18 +157,32 @@ function cloneRule(rule: webpack.RuleSetRule) {
154157 return res
155158}
156159
157- function isVueTemplateBlock ( query : string ) {
158- const parsed = qs . parse ( query . slice ( 1 ) )
159- return parsed . vue != null && parsed . type === 'template'
160- }
161-
162160function cloneRuleForRenderFn ( rule : webpack . RuleSetRule ) {
161+ const resource = rule . resource as Function
162+ const resourceQuery = rule . resourceQuery as Function
163+ let currentResource : string
163164 const res = {
164165 ...rule ,
165166 resource : {
166- test : / \. v u e $ /
167+ test : ( resource : string ) => {
168+ currentResource = resource
169+ return true
170+ }
167171 } ,
168- resourceQuery : isVueTemplateBlock
172+ resourceQuery : ( query : string ) => {
173+ const parsed = qs . parse ( query . slice ( 1 ) )
174+ if ( parsed . vue == null || parsed . type !== 'template' ) {
175+ return false
176+ }
177+ const fakeResourcePath = `${ currentResource } .js`
178+ if ( resource && ! resource ( fakeResourcePath ) ) {
179+ return false
180+ }
181+ if ( resourceQuery && ! resourceQuery ( query ) ) {
182+ return false
183+ }
184+ return true
185+ }
169186 }
170187 if ( rule . oneOf ) {
171188 res . oneOf = rule . oneOf . map ( cloneRule )
0 commit comments