tRPC End-to-End Type Safe APIs · Lektion

Ein tRPC-Monorepo einrichten

Konfigurieren Sie einen Monorepo-Arbeitsbereich für Ihr tRPC-Projekt und trennen Sie Backend, Frontend und gemeinsam genutzte Typen.

Lektion 1 von 412 Schritte

Ein tRPC-Monorepo einrichten ist eine kostenlose tRPC End-to-End Type Safe APIs-Lektion auf CoddyKit. Dies ist Lektion 1 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des tRPC End-to-End Type Safe APIs-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der tRPC End-to-End Type Safe APIs-Kurs umfasst insgesamt 4 Lektionen.

Teile dieser Lektion wurden noch nicht übersetzt und werden auf Englisch angezeigt.

What is a Monorepo?

Welcome to setting up a tRPC project in a monorepo! But what exactly is a monorepo?

  • A monorepo is a single repository containing multiple distinct projects.
  • Unlike a polyrepo (multiple repos for multiple projects), everything lives together.
  • Think of it as a big folder holding many smaller, related projects.

It's a powerful way to manage complex applications.

Why Monorepos for tRPC?

Monorepos offer unique advantages when working with tRPC:

  • Shared Types: Easily share TypeScript types between your frontend and backend.
  • Atomic Commits: Changes to the API and its consuming client can be committed together.
  • Simplified Refactoring: Rename a type in one place, and your editor updates everywhere.
  • Consistent Tooling: Share configurations for linters, formatters, and build tools.

This approach makes end-to-end type safety even more robust.

Choosing a Monorepo Tool

To manage a monorepo effectively, you'll need a workspace manager. These tools help link your internal packages.

Popular options include:

  • pnpm Workspaces: Efficient, uses symlinks for dependencies.
  • Yarn Workspaces: A common choice, built into Yarn.
  • Nx: A powerful build system and monorepo tool.
  • Turborepo: Focuses on fast builds and caching.

For this lesson, we'll use pnpm Workspaces due to its simplicity and efficiency.

Initializing the Monorepo

First, create a new directory for your monorepo and initialize a `package.json`.

Then, create a `pnpm-workspace.yaml` file to define your workspace roots. This tells pnpm where to find your sub-projects.

mkdir trpc-monorepo
cd trpc-monorepo
pnpm init

# pnpm-workspace.yaml
packages:
  - 'packages/*'

Structuring the 'packages' Folder

The `packages` directory will contain all your individual projects (or 'apps'). We'll typically have:

  • server: Your tRPC backend.
  • client: Your frontend application (e.g., React, Next.js).
  • shared: A package for common utilities, types, and Zod schemas shared by `server` and `client`.

Let's create these basic directories.

mkdir -p packages/server
mkdir -p packages/client
mkdir -p packages/shared

Setting up the 'server' Package

Inside `packages/server`, we'll set up a basic Node.js project. It needs its own `package.json` and `tsconfig.json`.

The `tsconfig.json` will specify compilation options for your backend code.

// packages/server/package.json
{
  "name": "server",
  "version": "1.0.0",
  "main": "src/index.ts",
  "scripts": {
    "dev": "ts-node-dev src/index.ts"
  },
  "dependencies": {
    "@trpc/server": "latest",
    "cors": "latest",
    "express": "latest"
  },
  "devDependencies": {
    "typescript": "latest",
    "ts-node-dev": "latest"
  }
}

// packages/server/tsconfig.json
{
  "compilerOptions": {
    "target": "ES2020",
    "module": "CommonJS",
    "esModuleInterop": true,
    "forceConsistentCasingInFileNames": true,
    "strict": true,
    "skipLibCheck": true,
    "outDir": "dist"
  }
}

Setting up the 'client' Package

Similarly, `packages/client` will house your frontend application. This example shows a basic React setup, but it could be Next.js or any other framework.

It will also have its own `package.json` and `tsconfig.json`.

// packages/client/package.json
{
  "name": "client",
  "version": "1.0.0",
  "private": true,
  "scripts": {
    "dev": "vite"
  },
  "dependencies": {
    "@trpc/client": "latest",
    "@trpc/react-query": "latest",
    "react": "latest",
    "react-dom": "latest",
    "@tanstack/react-query": "latest"
  },
  "devDependencies": {
    "typescript": "latest",
    "vite": "latest",
    "@vitejs/plugin-react": "latest"
  }
}

// packages/client/tsconfig.json
{
  "compilerOptions": {
    "target": "ESNext",
    "useDefineForClassFields": true,
    "lib": ["DOM", "DOM.Iterable", "ESNext"],
    "allowJs": false,
    "skipLibCheck": true,
    "esModuleInterop": false,
    "allowSyntheticDefaultImports": true,
    "strict": true,
    "forceConsistentCasingInFileNames": true,
    "module": "ESNext",
    "moduleResolution": "Node",
    "resolveJsonModule": true,
    "isolatedModules": true,
    "noEmit": true,
    "jsx": "react-jsx"
  },
  "include": ["src"],
  "references": [{ "path": "../shared" }]
}

Creating the 'shared' Package

The `packages/shared` directory is crucial for tRPC monorepos. It will contain types and definitions that both your `server` and `client` need.

This ensures end-to-end type safety by having a single source of truth for your API contract.

// packages/shared/package.json
{
  "name": "shared",
  "version": "1.0.0",
  "main": "src/index.ts",
  "types": "src/index.ts"
}

// packages/shared/tsconfig.json
{
  "compilerOptions": {
    "target": "ES2020",
    "module": "CommonJS",
    "strict": true,
    "declaration": true,
    "outDir": "dist"
  },
  "include": ["src"]
}

Linking Shared Types

Now that we have our `shared` package, we need to tell `server` and `client` about it.

We add `"shared": "workspace:*"` to the `dependencies` of both `server` and `client`'s `package.json` files.

Then, run `pnpm install` at the monorepo root to link them up.

// packages/server/package.json (snippet)
"dependencies": {
  "@trpc/server": "latest",
  "shared": "workspace:*" // Add this line!
}

// packages/client/package.json (snippet)
"dependencies": {
  "@trpc/client": "latest",
  "shared": "workspace:*" // Add this line!
}

pnpm install

Practical Example: Sharing a Type

Let's see how sharing types works. We'll define a `User` type in `shared` and use it in a mock backend and frontend snippet.

This demonstrates the core benefit: defining types once and using them everywhere.

// packages/shared/src/index.ts
export type User = {
  id: string;
  name: string;
  email: string;
};

// packages/server/src/index.ts (mock)
import { User } from 'shared';

const getUser = (): User => ({
  id: '123',
  name: 'Alice',
  email: 'alice@example.com'
});

console.log(getUser().name);

// packages/client/src/App.tsx (mock)
import { User } from 'shared';

const displayUser = (user: User) => {
  console.log(`User: ${user.name}`);
};

const currentUser: User = {
  id: '456',
  name: 'Bob',
  email: 'bob@example.com'
};
displayUser(currentUser);

Monorepo Setup Check

You've learned about setting up a tRPC monorepo. Which of the following is NOT a primary benefit of using a monorepo for a tRPC project?

Recap: tRPC Monorepo Setup

You've successfully explored how to set up a tRPC monorepo!

  • We defined a monorepo as a single repository for multiple projects.
  • Learned its benefits for tRPC, especially shared types.
  • Used `pnpm Workspaces` to structure `server`, `client`, and `shared` packages.
  • Understood how to link these packages to share code and types.

This foundation is key for building scalable and type-safe tRPC applications!

Kostenlos starten

Lerne tRPC End-to-End Type Safe APIs mit einem KI-Tutor — kostenlos

Schreibe und führe echten Code in deinem Browser aus, bekomme sofortige Hilfe von einem 24/7 KI-Tutor und setze dein Lernen im Web oder in der App fort.

Kurse
10
Lektionen
40

Häufig gestellte Fragen

Ist die Lektion „Ein tRPC-Monorepo einrichten“ kostenlos?

Ja — der vollständige Text von „Ein tRPC-Monorepo einrichten“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des tRPC End-to-End Type Safe APIs-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der tRPC End-to-End Type Safe APIs-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Ein tRPC-Monorepo einrichten“?

Konfigurieren Sie einen Monorepo-Arbeitsbereich für Ihr tRPC-Projekt und trennen Sie Backend, Frontend und gemeinsam genutzte Typen. Du übst tRPC End-to-End Type Safe APIs mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um tRPC End-to-End Type Safe APIs zu starten?

Keine Vorkenntnisse erforderlich. tRPC End-to-End Type Safe APIs auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 1 von 4.

Wie lange dauert die Lektion „Ein tRPC-Monorepo einrichten“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser tRPC End-to-End Type Safe APIs-Lektion Code schreiben und ausführen?

Ja. Jede tRPC End-to-End Type Safe APIs-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Ein tRPC-Monorepo einrichten
  2. Code-Sharing und Wiederverwendbarkeit
  3. tRPC-Funktionalität erweitern
  4. Gemeinsame tRPC-Pakete versionieren und veröffentlichen
← Zurück zu tRPC End-to-End Type Safe APIs