Skip to content

Latest commit

History

History
198 lines (124 loc) 路 4.44 KB

CONTRIBUTING.md

File metadata and controls

198 lines (124 loc) 路 4.44 KB

Contributing Guide

Thanks for that you are interested in contributing to Rspress. Before starting your contribution, please take a moment to read the following guidelines.


Setup the Dev Environment

Fork the Repo

Fork this repository to your own GitHub account and then clone it to your local.

Install Node.js

We recommend using Node.js 18. You can check your currently used Node.js version with the following command:

node -v

If you do not have Node.js installed in your current environment, you can use nvm or fnm to install it.

Here is an example of how to install the Node.js 18 LTS version via nvm:

# Install the LTS version of Node.js 18
nvm install 18 --lts

# Make the newly installed Node.js 18 as the default version
nvm alias default 18

# Switch to the newly installed Node.js 18
nvm use 18

Install pnpm

# Enable pnpm with corepack, only available on Node.js >= `v14.19.0`
corepack enable

Install Dependencies

pnpm install

What this will do:

  • Install all dependencies
  • Create symlinks between packages in the monorepo
  • Run the build script to build all packages (this will take some time, but is necessary to make ensure all packages are built)

Set Git Email

Please make sure you have your email set up in <https://github.com/settings/emails>. This will be needed later when you want to submit a pull request.

Check that your git client is already configured the email:

git config --list | grep email

Set the email to global config:

git config --global user.email "SOME_EMAIL@example.com"

Set the email for local repo:

git config user.email "SOME_EMAIL@example.com"

Making Changes and Building

Once you have set up the local development environment in your forked repo, we can start development.

Checkout A New Branch

It is recommended to develop on a new branch, as it will make things easier later when you submit a pull request:

git checkout -b MY_BRANCH_NAME

Build the Package

To build the package you want to change, first open the package directory, then run the build command:

# Replace some-path with the path of the package you want to work on
cd ./packages/some-path
pnpm run build

Alternatively, you can build the package from the root directory of the repository using the --filter option:

pnpm run --filter @modern-js/some-package build

Build all packages:

pnpm run build

If you need to clean all node_modules/* in the project, run the reset command:

pnpm run reset

Testing

Run Unit Tests

Before submitting a pull request, it's important to make sure that the changes haven't introduced any regressions or bugs. You can run the unit tests for the project by executing the following command:

pnpm run test:unit

Alternatively, you can run the unit tests of single package using the --filter option:

pnpm run --filter @modern-js/some-package test

Run E2E Tests

In addition to the unit tests, the Rspress also includes end-to-end (E2E) tests, which checks the functionality of the application as a whole.

You can run the test:e2e command to run the E2E tests:

pnpm run test:e2e

Linting

To help maintain consistency and readability of the codebase, we use a ESLint to lint the codes.

You can run the Linter by executing the following command:

pnpm run lint

Submitting Changes

Add a Changeset

Rspress is using Changesets to manage the versioning and changelogs.

If you've changed some packages, you need add a new changeset for the changes. Please run change command to select the changed packages and add the changeset info.

pnpm run change

Committing your Changes

Commit your changes to your forked repo, and create a pull request.

Format of PR titles

The format of PR titles follow Conventional Commits.

An example:

feat(plugin-swc): Add `xxx` config
^    ^    ^
|    |    |__ Subject
|    |_______ Scope
|____________ Type

Publishing

We use Modern.js Monorepo Solution to manage version and changelog.

Repository maintainers can publish a new version of all packages to npm.