This turborepo uses Yarn as a package manager. It includes the following packages/apps:
api
: an Express app- This provides an example of consuming a shared lib in an environment where module transpilation doesn't occur which would lead to changes lagging behind if you're where depending on another project building itself. Instead we manually reference the shared libs in the tsconfig so they can be built before we build
docs
: a Next.js appweb
: another Next.js app- The two above provide examples of consuming libraries in environments where module transpilation can occur
These packages provide consistency throughout the rest of the packages. e.g jest, eslint, and tsconfig setups
eslint-config-custom
:eslint
configurations (includeseslint-config-next
andeslint-config-prettier
)eslint-config-server
:eslint
configurations for our apiscripts
: scripts used throughout the monorepo (currently jest configs)tsconfig
:tsconfig.json
s used throughout the monorepo
This was pretty much the whole reason I started this template. I wanted to figure out a way to create a fast and enjoyable local development experience that didn't make bundling to release an app without publishing shared libs difficult.
ui
: a stub React component library shared by bothweb
anddocs
applications- When yarn dev is run this package is watched and recompiled on the fly, next-transpile-modules picks up changes live.
logger
: a shared library used by the api to log information to the console- When yarn dev is run this package is watched by both it's own dev command and the api's dev command through typescript project references. This allows us to have the fastest and most consistant development experience without preventing us from publishing this package in the future
Each package/app is 100% TypeScript.
This turborepo has some additional tools already setup for you:
- TypeScript for static type checking
- ESLint for code linting
- Prettier for code formatting
To build all apps and packages, run the following command:
cd my-turborepo
yarn run build
To develop all apps and packages, run the following command:
cd my-turborepo
yarn run dev
To develop a specific packages
cd my-turborepo
yarn run single-app:dev <app-name> #eg api
Turborepo can use a technique known as Remote Caching (Beta) to share cache artifacts across machines, enabling you to share build caches with your team and CI/CD pipelines.
By default, Turborepo will cache locally. To enable Remote Caching (Beta) you will need an account with Vercel. If you don't have an account you can create one, then enter the following commands:
cd my-turborepo
npx turbo login
This will authenticate the Turborepo CLI with your Vercel account.
Next, you can link your Turborepo to your Remote Cache by running the following command from the root of your turborepo:
npx turbo link
Learn more about the power of Turborepo: