fix(sfc): avoid auto name inference leading to unwanted recursion

fix #5965
fix #6027
fix #6029
This commit is contained in:
Evan You
2022-06-06 17:36:47 +08:00
parent 11e17a1a29
commit 9734b31c31
5 changed files with 15 additions and 7 deletions

View File

@@ -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 */

View File

@@ -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 ||