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