@@ -4,7 +4,11 @@ const qs = require('querystring')
4
4
const plugin = require ( './plugin' )
5
5
const selectBlock = require ( './select' )
6
6
const loaderUtils = require ( 'loader-utils' )
7
- const { attrsToQuery } = require ( './codegen/utils' )
7
+ const {
8
+ attrsToQuery,
9
+ testWebpack5,
10
+ genMatchResource
11
+ } = require ( './codegen/utils' )
8
12
const genStylesCode = require ( './codegen/styleInjection' )
9
13
const { genHotReloadCode } = require ( './codegen/hotReload' )
10
14
const genCustomBlocksCode = require ( './codegen/customBlocks' )
@@ -38,14 +42,16 @@ module.exports = function (source) {
38
42
sourceMap,
39
43
rootContext,
40
44
resourcePath,
41
- resourceQuery = ''
45
+ resourceQuery : _resourceQuery = '' ,
46
+ _compiler
42
47
} = loaderContext
43
-
44
- const rawQuery = resourceQuery . slice ( 1 )
45
- const inheritQuery = `&${ rawQuery } `
48
+ const isWebpack5 = testWebpack5 ( _compiler )
49
+ const rawQuery = _resourceQuery . slice ( 1 )
50
+ const resourceQuery = rawQuery ? `&${ rawQuery } ` : ''
46
51
const incomingQuery = qs . parse ( rawQuery )
47
52
const options = loaderUtils . getOptions ( loaderContext ) || { }
48
-
53
+ const enableInlineMatchResource =
54
+ isWebpack5 && Boolean ( options . experimentalInlineMatchResource )
49
55
const isServer = target === 'node'
50
56
const isShadow = ! ! options . shadowMode
51
57
const isProduction =
@@ -111,29 +117,47 @@ module.exports = function (source) {
111
117
// let isTS = false
112
118
const { script, scriptSetup } = descriptor
113
119
if ( script || scriptSetup ) {
114
- // const lang = script? .lang || scriptSetup? .lang
120
+ const lang = script . lang || ( scriptSetup && scriptSetup . lang )
115
121
// isTS = !!(lang && /tsx?/.test(lang))
122
+ const externalQuery =
123
+ script && ! scriptSetup && script . src ? `&external` : ``
116
124
const src = ( script && ! scriptSetup && script . src ) || resourcePath
117
125
const attrsQuery = attrsToQuery ( ( scriptSetup || script ) . attrs , 'js' )
118
- const query = `?vue&type=script${ attrsQuery } ${ inheritQuery } `
119
- const request = stringifyRequest ( src + query )
126
+ const query = `?vue&type=script${ attrsQuery } ${ resourceQuery } ${ externalQuery } `
127
+
128
+ let scriptRequest
129
+ if ( enableInlineMatchResource ) {
130
+ scriptRequest = stringifyRequest (
131
+ genMatchResource ( loaderContext , src , query , lang || 'js' )
132
+ )
133
+ } else {
134
+ scriptRequest = stringifyRequest ( src + query )
135
+ }
120
136
scriptImport =
121
- `import script from ${ request } \n` + `export * from ${ request } ` // support named exports
137
+ `import script from ${ scriptRequest } \n` + `export * from ${ scriptRequest } ` // support named exports
122
138
}
123
139
124
140
// template
125
141
let templateImport = `var render, staticRenderFns`
126
142
let templateRequest
127
143
if ( descriptor . template ) {
128
144
const src = descriptor . template . src || resourcePath
145
+ const externalQuery = descriptor . template . src ? `&external` : ``
129
146
const idQuery = `&id=${ id } `
130
147
const scopedQuery = hasScoped ? `&scoped=true` : ``
131
148
const attrsQuery = attrsToQuery ( descriptor . template . attrs )
132
149
// const tsQuery =
133
150
// options.enableTsInTemplate !== false && isTS ? `&ts=true` : ``
134
- const query = `?vue&type=template${ idQuery } ${ scopedQuery } ${ attrsQuery } ${ inheritQuery } `
135
- const request = ( templateRequest = stringifyRequest ( src + query ) )
136
- templateImport = `import { render, staticRenderFns } from ${ request } `
151
+ const query = `?vue&type=template${ idQuery } ${ scopedQuery } ${ attrsQuery } ${ resourceQuery } ${ externalQuery } `
152
+ if ( enableInlineMatchResource ) {
153
+ templateRequest = stringifyRequest (
154
+ // TypeScript syntax in template expressions is not supported in Vue 2, so the lang is always 'js'
155
+ genMatchResource ( loaderContext , src , query , 'js' )
156
+ )
157
+ } else {
158
+ templateRequest = stringifyRequest ( src + query )
159
+ }
160
+ templateImport = `import { render, staticRenderFns } from ${ templateRequest } `
137
161
}
138
162
139
163
// styles
@@ -147,7 +171,8 @@ module.exports = function (source) {
147
171
stringifyRequest ,
148
172
needsHotReload ,
149
173
isServer || isShadow , // needs explicit injection?
150
- isProduction
174
+ isProduction ,
175
+ enableInlineMatchResource
151
176
)
152
177
}
153
178
@@ -173,10 +198,12 @@ var component = normalizer(
173
198
174
199
if ( descriptor . customBlocks && descriptor . customBlocks . length ) {
175
200
code += genCustomBlocksCode (
201
+ loaderContext ,
176
202
descriptor . customBlocks ,
177
203
resourcePath ,
178
204
resourceQuery ,
179
- stringifyRequest
205
+ stringifyRequest ,
206
+ enableInlineMatchResource
180
207
)
181
208
}
182
209
0 commit comments