# How To Contribute

## Opening issues

- Before opening issue please search for the keyword see whether the issue you encountered has been reported already. :pray:

- Issues should be opened via [Issue Template](https://elementui.github.io/issue-generator/#/en-US?repo=element-plus), fill in the form to provide
  sufficient information to reproduce the issue, so that our developers can help you verify and fix it

**Insufficient information issue WILL BE CLOSED directly because we cannot reproduce them**

- Issues that with feature request should to go to [RFCs](https://github.com/element-plus/rfcs/issues). This helps us managing the project.

Next section is for those who wants to help develop Element Plus.

## Pre-request

You should be having:

NodeJS >= 16

Git > v2.20

Some of our compiling code used syntax that introduced in NodeJS>16.0 so you will be need to install that in advance.

## Clone the repository

1. Click the fork button on the top right of this page.
2. Download the project to your machine.
3. Run commands below to bootstrap the this project.

```shell
cd $THE_PROJECT_PATH_YOU_DOWNLOADED
# If you haven't installed yet
pnpm install
```

## Verify Installation

Then you can following command to verify your installation.

```shell
pnpm t
pnpm format
```

## Getting Started developing

Ah, now you have installed the code correctly, you can choose:

### Modify and update the documentation site.

```shell
# If you would like to modify the website source code of https://element-plus.org
# It was made with [VitePress](https://vitepress.vuejs.org)
pnpm run docs:gen-locale # This generates locale files for your local development
pnpm run docs:dev
```

### Making changes to the component instead of website

```shell
# If you would like to run a local playground to test out your changes against
# Some specific component
touch play/src/App.vue # Adding an entry for the play to run.
pnpm run dev
```

You can follow the [LOCAL DEVELOPMENT GUIDE](https://github.com/element-plus/element-plus/blob/dev/LOCAL_DEV.md) to do development more quickly.

### Compile the source code

If you would like to compile this project locally:

```shell
# This one line code would start compiling the code which was published to https://npmjs.com
pnpm build
```

### Compile documentation website

If you would like to compile the website code locally:

```shell
DOC_ENV=production yarn docs:build
```

## Pulling request

After you done your coding section, please note:

1. Update the tests to cover all cases
2. Update co-responding documentation if you are making changes against API
3. Write a comprehensive commit message
4. Push your local changes to your remote, and then pull request to the upstream.
5. In the description section, you can add more information about your changes, to help the reviewers for better
   understanding the context here.

## Commit template

We prepared a commit message template for you to refer to, you can also follow the instruction of the CLI tool to generate
commit message intuitively.

1. With command

```bash
pnpm cz
```

2. You can also write the commit message by hand, but make sure your
   commit message follows the rules.

We have a [commit template](https://github.com/element-plus/element-plus/blob/dev/commit-example.md)

NOTE:
**PRs with unformatted commit message WILL NOT BE ACCEPTED**

That's all, thanks for your contribution! 🤩
