fix(sfc): avoid auto name inference leading to unwanted recursion
fix #5965 fix #6027 fix #6029
This commit is contained in:
parent
11e17a1a29
commit
9734b31c31
@ -2,7 +2,7 @@
|
||||
|
||||
exports[`SFC analyze <script> bindings auto name inference basic 1`] = `
|
||||
"export default {
|
||||
name: 'FooBar',
|
||||
__name: 'FooBar',
|
||||
setup(__props, { expose }) {
|
||||
expose();
|
||||
const a = 1
|
||||
|
@ -1650,7 +1650,7 @@ describe('SFC analyze <script> bindings', () => {
|
||||
}
|
||||
)
|
||||
expect(content).toMatch(`export default {
|
||||
name: 'FooBar'`)
|
||||
__name: 'FooBar'`)
|
||||
assertCode(content)
|
||||
})
|
||||
|
||||
|
@ -1463,7 +1463,7 @@ export function compileScript(
|
||||
if (!hasDefaultExportName && filename && filename !== DEFAULT_FILENAME) {
|
||||
const match = filename.match(/([^/\\]+)\.\w+$/)
|
||||
if (match) {
|
||||
runtimeOptions += `\n name: '${match[1]}',`
|
||||
runtimeOptions += `\n __name: '${match[1]}',`
|
||||
}
|
||||
}
|
||||
if (hasInlinedSsrRenderFn) {
|
||||
|
@ -106,6 +106,10 @@ export interface ComponentInternalOptions {
|
||||
* This one should be exposed so that devtools can make use of it
|
||||
*/
|
||||
__file?: string
|
||||
/**
|
||||
* name inferred from filename
|
||||
*/
|
||||
__name?: string
|
||||
}
|
||||
|
||||
export interface FunctionalComponent<P = {}, E extends EmitsOptions = {}>
|
||||
@ -949,11 +953,12 @@ const classify = (str: string): string =>
|
||||
str.replace(classifyRE, c => c.toUpperCase()).replace(/[-_]/g, '')
|
||||
|
||||
export function getComponentName(
|
||||
Component: ConcreteComponent
|
||||
): string | undefined {
|
||||
Component: ConcreteComponent,
|
||||
includeInferred = true
|
||||
): string | false | undefined {
|
||||
return isFunction(Component)
|
||||
? Component.displayName || Component.name
|
||||
: Component.name
|
||||
: Component.name || (includeInferred && Component.__name)
|
||||
}
|
||||
|
||||
/* istanbul ignore next */
|
||||
|
@ -86,7 +86,10 @@ function resolveAsset(
|
||||
|
||||
// explicit self name has highest priority
|
||||
if (type === COMPONENTS) {
|
||||
const selfName = getComponentName(Component)
|
||||
const selfName = getComponentName(
|
||||
Component,
|
||||
false /* do not include inferred name to avoid breaking existing code */
|
||||
)
|
||||
if (
|
||||
selfName &&
|
||||
(selfName === name ||
|
||||
|
Loading…
Reference in New Issue
Block a user