Skip to content

Commit c562500

Browse files
authored
fix(plugin-vue): sfc src import respect alias (#1544)
fix #1542
1 parent fb913a4 commit c562500

File tree

1 file changed

+36
-21
lines changed

1 file changed

+36
-21
lines changed

packages/plugin-vue/src/main.ts

+36-21
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,11 @@ export async function transformMain(
4242
const hasScoped = descriptor.styles.some((s) => s.scoped)
4343

4444
// script
45-
const { code: scriptCode, map } = await genScriptCode(descriptor, options)
45+
const { code: scriptCode, map } = await genScriptCode(
46+
descriptor,
47+
options,
48+
pluginContext
49+
)
4650

4751
// template
4852
// Check if we can use compile template as inlined render function
@@ -57,7 +61,7 @@ export async function transformMain(
5761
let templateCode = ''
5862
let templateMap
5963
if (hasTemplateImport) {
60-
;({ code: templateCode, map: templateMap } = genTemplateCode(
64+
;({ code: templateCode, map: templateMap } = await genTemplateCode(
6165
descriptor,
6266
options,
6367
pluginContext
@@ -71,10 +75,10 @@ export async function transformMain(
7175
: ''
7276

7377
// styles
74-
const stylesCode = genStyleCode(descriptor)
78+
const stylesCode = await genStyleCode(descriptor, pluginContext)
7579

7680
// custom blocks
77-
const customBlocksCode = genCustomBlockCode(descriptor)
81+
const customBlocksCode = await genCustomBlockCode(descriptor, pluginContext)
7882

7983
const output: string[] = [
8084
scriptCode,
@@ -148,7 +152,7 @@ export async function transformMain(
148152
}
149153
}
150154

151-
function genTemplateCode(
155+
async function genTemplateCode(
152156
descriptor: SFCDescriptor,
153157
options: ResolvedOptions,
154158
pluginContext: PluginContext
@@ -167,7 +171,7 @@ function genTemplateCode(
167171
)
168172
} else {
169173
if (template.src) {
170-
linkSrcToDescriptor(template.src, descriptor)
174+
await linkSrcToDescriptor(template.src, descriptor, pluginContext)
171175
}
172176
const src = template.src || descriptor.filename
173177
const srcQuery = template.src ? `&src` : ``
@@ -184,7 +188,8 @@ function genTemplateCode(
184188

185189
async function genScriptCode(
186190
descriptor: SFCDescriptor,
187-
options: ResolvedOptions
191+
options: ResolvedOptions,
192+
pluginContext: PluginContext
188193
): Promise<{
189194
code: string
190195
map: RawSourceMap
@@ -213,7 +218,7 @@ async function genScriptCode(
213218
}
214219
} else {
215220
if (script.src) {
216-
linkSrcToDescriptor(script.src, descriptor)
221+
await linkSrcToDescriptor(script.src, descriptor, pluginContext)
217222
}
218223
const src = script.src || descriptor.filename
219224
const langFallback = (script.src && path.extname(src).slice(1)) || 'js'
@@ -231,13 +236,17 @@ async function genScriptCode(
231236
}
232237
}
233238

234-
function genStyleCode(descriptor: SFCDescriptor) {
239+
async function genStyleCode(
240+
descriptor: SFCDescriptor,
241+
pluginContext: PluginContext
242+
) {
235243
let stylesCode = ``
236244
let hasCSSModules = false
237245
if (descriptor.styles.length) {
238-
descriptor.styles.forEach((style, i) => {
246+
for (let i = 0; i < descriptor.styles.length; i++) {
247+
const style = descriptor.styles[i]
239248
if (style.src) {
240-
linkSrcToDescriptor(style.src, descriptor)
249+
await linkSrcToDescriptor(style.src, descriptor, pluginContext)
241250
}
242251
const src = style.src || descriptor.filename
243252
// do not include module in default query, since we use it to indicate
@@ -256,16 +265,20 @@ function genStyleCode(descriptor: SFCDescriptor) {
256265
stylesCode += `\nimport ${JSON.stringify(styleRequest)}`
257266
}
258267
// TODO SSR critical CSS collection
259-
})
268+
}
260269
}
261270
return stylesCode
262271
}
263272

264-
function genCustomBlockCode(descriptor: SFCDescriptor) {
273+
async function genCustomBlockCode(
274+
descriptor: SFCDescriptor,
275+
pluginContext: PluginContext
276+
) {
265277
let code = ''
266-
descriptor.customBlocks.forEach((block, index) => {
278+
for (let index = 0; index < descriptor.customBlocks.length; index++) {
279+
const block = descriptor.customBlocks[index]
267280
if (block.src) {
268-
linkSrcToDescriptor(block.src, descriptor)
281+
await linkSrcToDescriptor(block.src, descriptor, pluginContext)
269282
}
270283
const src = block.src || descriptor.filename
271284
const attrsQuery = attrsToQuery(block.attrs, block.type)
@@ -274,7 +287,7 @@ function genCustomBlockCode(descriptor: SFCDescriptor) {
274287
const request = JSON.stringify(src + query)
275288
code += `import block${index} from ${request}\n`
276289
code += `if (typeof block${index} === 'function') block${index}(_sfc_main)\n`
277-
})
290+
}
278291
return code
279292
}
280293

@@ -298,11 +311,13 @@ function genCSSModulesCode(
298311
* with its owner SFC descriptor so that we can get the information about
299312
* the owner SFC when compiling that file in the transform phase.
300313
*/
301-
function linkSrcToDescriptor(src: string, descriptor: SFCDescriptor) {
302-
const srcFile = path.posix.resolve(
303-
path.posix.dirname(descriptor.filename),
304-
src
305-
)
314+
async function linkSrcToDescriptor(
315+
src: string,
316+
descriptor: SFCDescriptor,
317+
pluginContext: PluginContext
318+
) {
319+
const srcFile =
320+
(await pluginContext.resolve(src, descriptor.filename))?.id || src
306321
setDescriptor(srcFile, descriptor)
307322
}
308323

0 commit comments

Comments
 (0)