If you're like me, you may have spent some time working with microservices and have grown accustomed to the flexibility and independence they offer. However, as your project grows and evolves, you may find yourself feeling the pain of managing multiple codebases and the overhead of coordinating changes across teams.
That's where monorepos come in. A monorepo is a single version control repository that contains multiple projects, each with its own set of dependencies. This allows for better collaboration and easier code management, as everything is in one place.
Language Oriented - While there might be language specific support for setting it up, it still might require a lot of work! Also, if you have a multi-language microservice setup, it would take time to perfectly nail it!
Inconsistency - For larger teams, it might be difficult to maintain numerous file changes in the same/different file, which may lead in breaking the app. This, however can be solve to which teams should own the service or app.
Machine dilemmas - Since it has lots of services inside the project, IDEs might hang when installing dependencies, and running multiple services concurrently. This might also be an issue on CI/CDs as base runners might not be able to accommodate large amount of packages cached/uploaded artifacts which might make extra costs on you.
There is only one thing you need in order to setup your Node JS monorepo, and that is Node itself. Upon installing node you can choose whatever tools you want on how you want to configure your project from scratch, or you may also want to consider using build systems such as Turborepo or Nx for quick and easier setup.
While there are lots of problems solved by monorepo, it also has downsides. Scaling it might cost you a bit or more, but might save you time.
For reference you can take a look on my old repo which uses yarn workspaces. You can fork, clone, and play with it locally. Happy coding!