Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(plugin-vue): deprecate inline main (fix #31) #222

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
51 changes: 11 additions & 40 deletions packages/plugin-vue/src/main.ts
Expand Up @@ -12,12 +12,7 @@ import {
getPrevDescriptor,
setSrcDescriptor,
} from './utils/descriptorCache'
import {
canInlineMain,
isUseInlineTemplate,
resolveScript,
scriptIdentifier,
} from './script'
import { isUseInlineTemplate, resolveScript, scriptIdentifier } from './script'
import { transformTemplateInMain } from './template'
import { isEqualBlock, isOnlyTemplateChanged } from './handleHotUpdate'
import { createRollupError } from './utils/error'
Expand Down Expand Up @@ -313,41 +308,17 @@ async function genScriptCode(

const script = resolveScript(descriptor, options, ssr)
if (script) {
// If the script is js/ts and has no external src, it can be directly placed
// in the main module.
if (canInlineMain(descriptor, options)) {
if (!options.compiler.version) {
// if compiler-sfc exposes no version, it's < 3.3 and doesn't support
// genDefaultAs option.
const userPlugins = options.script?.babelParserPlugins || []
const defaultPlugins =
script.lang === 'ts'
? userPlugins.includes('decorators')
? (['typescript'] as const)
: (['typescript', 'decorators-legacy'] as const)
: []
scriptCode = options.compiler.rewriteDefault(
script.content,
scriptIdentifier,
[...defaultPlugins, ...userPlugins],
)
} else {
scriptCode = script.content
}
map = script.map
} else {
if (script.src) {
await linkSrcToDescriptor(script.src, descriptor, pluginContext, false)
}
const src = script.src || descriptor.filename
const langFallback = (script.src && path.extname(src).slice(1)) || 'js'
const attrsQuery = attrsToQuery(script.attrs, langFallback)
const srcQuery = script.src ? `&src=true` : ``
const query = `?vue&type=script${srcQuery}${attrsQuery}`
const request = JSON.stringify(src + query)
scriptCode =
`import _sfc_main from ${request}\n` + `export * from ${request}` // support named exports
if (script.src) {
await linkSrcToDescriptor(script.src, descriptor, pluginContext, false)
}
const src = script.src || descriptor.filename
const langFallback = (script.src && path.extname(src).slice(1)) || 'js'
const attrsQuery = attrsToQuery(script.attrs, langFallback)
const srcQuery = script.src ? `&src=true` : ``
const query = `?vue&type=script${srcQuery}${attrsQuery}`
const request = JSON.stringify(src + query)
scriptCode =
`import _sfc_main from ${request}\n` + `export * from ${request}` // support named exports
}
return {
code: scriptCode,
Expand Down
22 changes: 0 additions & 22 deletions packages/plugin-vue/src/script.ts
Expand Up @@ -69,9 +69,6 @@ export function resolveScript(
reactivityTransform: options.reactivityTransform !== false,
templateOptions: resolveTemplateCompilerOptions(descriptor, options, ssr),
sourceMap: options.sourceMap,
genDefaultAs: canInlineMain(descriptor, options)
? scriptIdentifier
: undefined,
})

if (!options.isProduction && resolved?.deps) {
Expand All @@ -94,22 +91,3 @@ export function resolveScript(
cacheToUse.set(descriptor, resolved)
return resolved
}

// If the script is js/ts and has no external src, it can be directly placed
// in the main module. Skip for build
export function canInlineMain(
descriptor: SFCDescriptor,
options: ResolvedOptions,
): boolean {
if (descriptor.script?.src || descriptor.scriptSetup?.src) {
return false
}
const lang = descriptor.script?.lang || descriptor.scriptSetup?.lang
if (!lang) {
return true
}
if (lang === 'ts' && options.devServer) {
return true
}
return false
}