贡献

一个关于为Nuxt UI做贡献的全面指南,包括项目结构、开发工作流程和最佳实践。

Nuxt UI因其令人难以置信的社区支持而蓬勃发展。我们欢迎通过bug报告,pull requests和反馈来帮助使这个库变得更好。️

在报告错误或请求功能之前,请确保您已阅读我们的documentation和现有的issues。有关问题和帮助,请使用GitHub Discussions。

AI辅助

我们通过AGENTS.md为AI助手提供贡献指南,帮助您为Nuxt UI贡献内容。它会被所有AI编码代理自动拾取,并通过组件结构、主题模式、测试约定和文档指南进行指导。

Project structure

以下是Nuxt UI项目结构中关键目录和文件的概述:

Documentation

该文档位于docs文件夹中,作为Nuxt应用程序使用@nuxt/content从Markdown文件生成页面。有关其工作原理的详细信息,请参阅Nuxt内容文档。以下是其结构的详细信息:

├── app/
│   ├── assets/
│   ├── components/
│   │   └── content/
│   │       └── examples   # Components used in documentation as examples
│   ├── composables/
│   └── ...
├── content/
│   ├── blog/
│   ├── docs/
│   │   ├── 1.getting-started
│   │   ├── 2.components   # Components documentation
│   │   ├── 3.composables
│   │   └── 4.typography
│   └── ...            # Landing pages (index.yml, showcase.yml...)

Module

模块代码位于src文件夹中。下面是其结构的分解:

├── plugins/
├── runtime/
│   ├── components/        # Where all the components are located
│   │   ├── Accordion.vue
│   │   ├── Alert.vue
│   │   └── ...
│   ├── composables/
│   ├── locale/
│   ├── plugins/
│   ├── types/
│   ├── utils/
│   └── vue/
│       ├── components/
│       └── plugins/
├── theme/                 # This where the theme for each component is located
│   ├── accordion.ts       # Theme for Accordion component
│   ├── alert.ts
│   └── ...
├── utils/
└── module.ts

CLI

为了使开发更容易,我们创建了一个CLI,您可以使用它来生成组件和区域设置。您可以使用pnpm cli make命令访问它。

Components

可以使用以下命令创建新组件:

pnpm cli make component <name> [options]

可用选项:

  • --primitive创建基本元件
  • --prose创建散文组件
  • --content创建内容组件
  • --template仅生成特定模板(可用模板:playground、docs、test、theme、component)

范例:

# Create a basic component
pnpm cli make component my-component

# Create a prose component
pnpm cli make component heading --prose

# Create a content component
pnpm cli make component block --content

# Generate only documentation template
pnpm cli make component my-component --template=docs
在创建新组件时,CLI将自动生成所有必要的文件,如组件本身、主题、测试和文档。

Locales

您可以使用以下命令创建新的区域设置:

pnpm cli make locale --code <code>

区域设置名称和方向从CLDR开始填充,并根据该名称验证代码。您可以使用--name和--dir标志覆盖它们。

翻译完消息后,您可以通过运行以下命令来检查您的语言环境是否与其他语言环境(消息键、占位符、名称和方向)保持一致:

pnpm test locale --run
在文档中了解有关i18n的更多信息。

Submit a Pull Request(PR)

在开始之前,请检查是否存在描述您正在处理的问题或功能请求的现有问题。如果存在,请对该问题发表评论,让我们知道您正在处理该问题。

如果没有,打开一个新的问题来讨论问题或功能。

Local development

要开始本地开发,请执行以下步骤:

将nuxt/ui存储库克隆到本地计算机

git clone -b v4 https://github.com/nuxt/ui.git

EnableCorepack

corepack enable

Install dependencies

pnpm install

Generate type stubs

pnpm run dev:prepare

Start development

  • 要处理位于docs文件夹中的documentation,请运行:
pnpm run docs
  • 要使用playground测试Nuxt组件,请运行:
pnpm run dev
  • 要使用playground测试Vue组件,请运行:
pnpm run dev:vue
如果您正在实现一个新组件,请查看CLI部分以快速启动该过程。

IDE设置

我们建议将VSCode与ESLint扩展名一起使用。您可以在保存代码时启用自动修复和格式化。具体操作如下:

.vscode/settings.json
{
  "editor.codeActionsOnSave": {
    "source.fixAll": "never",
    "source.fixAll.eslint": "explicit"
  },
  "prettier.enable": false
}
由于ESLint已配置为格式化代码,因此无需使用Prettier复制功能。如果您在编辑器中安装了ESLint,我们建议禁用它以避免冲突。

Linting

您可以使用lint命令来检查是否存在linting错误:

pnpm run lint # check for linting errors
pnpm run lint:fix # fix linting errors

Type checking

我们使用TypeScript进行类型检查。您可以使用typecheck命令来检查类型错误:

pnpm run typecheck

Testing

在提交PR之前,请确保运行以下测试:

pnpm run test
如果必须更新快照,请在测试运行完成后按u。

Commit约定

我们使用Conventional Committs作为提交消息,它允许基于提交自动生成更改日志。如果您还不熟悉,请阅读guide到。

  • 将fix和feat用于影响功能或逻辑的代码更改
  • docs用于文档更改,chore用于维护任务

Making a Pull Request

我们会立即检查它。如果分配给维护人员,他们会仔细检查它。忽略红色文本;它是用于跟踪目的。

谢谢

再次感谢你对这个项目感兴趣!你太棒了!️