Skip to content

useVueMultiWordComponentNames

¥Summary

¥How to configure

biome.json
{
"linter": {
"rules": {
"nursery": {
"useVueMultiWordComponentNames": "error"
}
}
}
}

¥Description

强制要求 Vue 组件使用多词组件名称。

¥Enforce multi-word component names in Vue components.

使用单字组件名称(例如 AppHeader)可能会导致:

¥Using a single-word component name (e.g. App, Header) can:

  • 与原生/自定义 HTML 元素(现有或未来)的冲突

    ¥Conflict with native/custom HTML elements (present or future)

  • 降低清晰度/表达力

    ¥Reduce clarity/expressiveness

此规则要求组件名称为 “multi-word”。

¥This rule requires component names to be “multi-word”.

名称在以下情况下被视为多词:

¥A name is considered multi-word when:

  • Kebab-case 命名法:包含至少一个连字符 (my-component)

    ¥Kebab-case: contains at least one hyphen (my-component)

  • PascalCase / CamelCase:包含至少两个大写字母 (MyComponent);拒绝使用单大写字母名称,例如 AppFoo

    ¥PascalCase / CamelCase: contains at least two capital letters (MyComponent); single-cap names like App or Foo are rejected

组件名称从 Options API 组件的 name 属性中提取,如果未显式设置,则从文件名推断。

¥Component names are extracted from the name property in Options API components, or inferred from the file name if not explicitly set.

¥Examples

¥Invalid

<script>
export default {
name: "Foo"
};
</script>
code-block.vue:2:9 lint/nursery/useVueMultiWordComponentNames ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

This Component’s name “Foo” only contains one word.

1 │ export default {
> 2 │ name: “Foo”
^^^^^
3 │ };
4 │

Single-word component names can collide with HTML elements and are less descriptive.

Rename the component to have 2 or more words (e.g. “FooItem”, or “BarView”).

import { defineComponent } from "vue";
export default defineComponent({
name: "Header"
});
code-block.js:3:9 lint/nursery/useVueMultiWordComponentNames ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

This Component’s name “Header” only contains one word.

1 │ import { defineComponent } from “vue”;
2 │ export default defineComponent({
> 3 │ name: “Header”
^^^^^^^^
4 │ });
5 │

Single-word component names can collide with HTML elements and are less descriptive.

Rename the component to have 2 or more words (e.g. “FooItem”, or “BarView”).

import { createApp } from "vue";
createApp({
name: "Widget"
}).mount("#app");
code-block.js:3:9 lint/nursery/useVueMultiWordComponentNames ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

This Component’s name “Widget” only contains one word.

1 │ import { createApp } from “vue”;
2 │ createApp({
> 3 │ name: “Widget”
^^^^^^^^
4 │ }).mount(“#app”);
5 │

Single-word component names can collide with HTML elements and are less descriptive.

Rename the component to have 2 or more words (e.g. “FooItem”, or “BarView”).

¥Valid

<script>
export default {
name: "MyComponent"
};
</script>
export default {
name: "my-component"
};
defineComponent({
name: "MyComponent"
});
createApp({ name: "MyApp" }).mount("#app");

¥Options

新增了要忽略的单字组件名称(不区分大小写)。该规则默认忽略 Vue 内置组件和 App

¥Additional single-word component names to ignore (case-insensitive). The rule already ignores Vue built-in components and App by default.

biome.json
{
"linter": {
"rules": {
"nursery": {
"useVueMultiWordComponentNames": {
"options": {
"ignores": [
"Foo"
]
}
}
}
}
}
}

¥Valid

<script>
export default {
name: "Foo"
};
</script>

¥Related links