The Future of Development: Monorepos on GitHub

The Future of Development: Monorepos on GitHub

Overview :-

In the evolving landscape of software development, the concept of monorepos has been gaining traction among both small startups and large enterprises. A monorepo, or monolithic repository, is a single repository that stores all of your code and assets for every project. This approach contrasts with having multiple smaller repositories, each dedicated to parts of a project or different projects altogether. GitHub, a platform at the forefront of version control and collaboration, has adapted to support this trend, offering tools and features that facilitate the management of monorepos.

Pre-requisites :-

Before diving into the world of monorepos on GitHub, there are a few prerequisites that need to be understood and set up:

  • Familiarity with Git, the version control system upon which GitHub is built, is essential.

  • Basic knowledge of GitHub and its features like branches, commits, pull requests, and merges.

Understanding Rush for Monorepo Management

Rush is a powerful tool designed to simplify the lives of developers working with multiple NPM packages within a single repository. As stated on its official website, rushjs.io, Rush provides a professional, fast solution to consolidate your projects, enhancing scalability and maintainability.

Installation and Setup

To begin, install Rush globally using the command:

npm install -g @microsoft/rush

Node.js and pnpm

A Long-Term Support (LTS) version of Node.js is required, alongside pnpm, a package manager that offers excellent support for monorepos. Install pnpm with:

npm install -g pnpm

Verify your Node.js version using:

node -v

Configuring Your Monorepo with Rush

Initialize your monorepo with rush init, which sets up necessary configuration files. Key steps include:

  1. Creation of rush.json, the primary configuration file.

  2. Ensure you are using stable versions of Node.js and package managers by checking pnpmVersion and nodeSupportedVersionRange. If not using an LTS version of Node.js, adjust the suppressNodeLtsWarning to avoid build warnings.

Integrating Projects

To integrate React projects into your monorepo:

  1. Either start new projects or migrate existing ones. For new projects:
mkdir apps && cd apps && npx create-react-app react-portal --template typescript
  1. Link projects in the rush.json file:
"projects": [
     {
         "packageName": "react",         
         "projectFolder": "apps/react"    
     },
     {
         "packageName": "react-js",         
         "projectFolder": "apps/react-js"
     } 
]
  1. Run rush update to consolidate dependencies.

Building Projects

To build your projects, Rush checks the build scripts in your package.json. You can build individual projects using:

rush build -o "react"

If no changes are detected, Rush skips the build, saving time and resources.

Creating Shared Components

Monorepos excel in code reuse. For instance, create a shared Button component:

  1. Set up the component in lib/button and define it in rush.json.

  2. Update and build the monorepo to include the new component:

rush update && rush build
  1. Use the component in your projects by adding it with rush add --package @libs/button.

Custom Commands and Automation

Enhance your workflow with custom commands defined in common/config/rush/command-line.json. For example, a global test command can be executed across projects using rushx test, streamlining the testing process.

Leveraging GitHub for Monorepo Success

Integrate GitHub Actions to automate deployment and other workflows, ensuring continuous integration and delivery. GitHub’s robust platform complements the monorepo structure by providing version control and collaboration tools.

Monorepo Git Hooks

Utilize Git hooks for automated checks and tasks. For instance, a pre-commit hook can ensure commit messages meet your project’s standards. Set up the hook in the common/git-hooks folder and make it executable with:

chmod +x pre-commit

Run rush install to activate the hook.
**Exploring Other Monorepo Tools**
While Rush is highly effective, other tools like Lerna, Bazel, Turborepo, and Buck also offer unique features for monorepo management. Explore these tools to find the best fit for your project requirements.

Conclusion :-

Setting up a monorepo with Rush and GitHub streamlines project management, enhances collaboration, and boosts productivity. By following this guide, you’re well on your way to mastering monorepo management and leveraging the full potential of modern development practices.