The Angular CLI (`ng`) is the primary tool for managing an Angular workspace. Always prefer CLI commands over manual file creation or generic `npm` commands when modifying project structure or adding Angular-specific dependencies.
## 1. Managing Dependencies
**ALWAYS use `ng add` for Angular libraries** instead of `npm install`. `ng add` installs the package AND runs initialization schematics (e.g., configuring `angular.json`, updating root providers).
```bash
ng add @angular/material
ng add tailwindcss
ng add @angular/fire
```
To update the application and its dependencies (which automatically runs code migrations):
| Component | `ng g c path/to/name` | Generates a component. Use `--inline-style` (`-s`) or `--inline-template` (`-t`) if requested. |
| Service | `ng g s path/to/name` | Generates an `@Injectable({providedIn: 'root'})` service. |
| Directive | `ng g d path/to/name` | Generates a directive. |
| Pipe | `ng g p path/to/name` | Generates a pipe. |
| Guard | `ng g g path/to/name` | Generates a functional route guard. |
| Environments | `ng g environments` | Scaffolds `src/environments/` and updates `angular.json` with file replacements. |
_Note: There is no command to generate a single route definition. Generate a component, then manually add it to the `Routes` array in `app.routes.ts`._
## 3. Development Server & Proxying
Start the local development server with hot-module replacement (HMR):
```bash
ng serve
```
### Backend API Proxying
To proxy API requests during development (e.g., rerouting `/api` to a local Node server):
Compile the application into an output directory (default: `dist/<project-name>/browser`). Modern Angular uses the `@angular/build:application` builder (esbuild-based).