1392 lines
26 KiB
Markdown
1392 lines
26 KiB
Markdown
# NPM Commands Reference
|
|
|
|
Complete reference for all npm scripts in Changemaker Lite V2.
|
|
|
|
## Overview
|
|
|
|
Changemaker Lite V2 uses npm scripts for development, building, testing, and database management. Scripts are defined in `package.json` files in two main directories:
|
|
|
|
- **api/package.json** - Backend API scripts (Express + Fastify)
|
|
- **admin/package.json** - Frontend GUI scripts (React + Vite)
|
|
|
|
This guide documents all available scripts, their usage, and common combinations.
|
|
|
|
## API Scripts
|
|
|
|
Location: `api/package.json`
|
|
|
|
### Development Scripts
|
|
|
|
#### `npm run dev`
|
|
Starts the Express API server in development mode with hot reload.
|
|
|
|
```bash
|
|
cd api
|
|
npm run dev
|
|
```
|
|
|
|
**What it does:**
|
|
- Runs `tsx watch src/server.ts`
|
|
- Auto-restarts on file changes (`.ts` files)
|
|
- Loads environment from `.env`
|
|
- Runs on port `API_PORT` (default: 4000)
|
|
|
|
**Output:**
|
|
```
|
|
Server running on port 4000
|
|
Database connected
|
|
Redis connected
|
|
BullMQ worker started
|
|
```
|
|
|
|
**Use when:**
|
|
- Developing API endpoints
|
|
- Testing backend changes
|
|
- Debugging server code
|
|
|
|
#### `npm run dev:media`
|
|
Starts the Fastify Media API server in development mode.
|
|
|
|
```bash
|
|
cd api
|
|
npm run dev:media
|
|
```
|
|
|
|
**What it does:**
|
|
- Runs `tsx watch src/media-server.ts`
|
|
- Auto-restarts on file changes
|
|
- Runs on port `MEDIA_API_PORT` (default: 4100)
|
|
|
|
**Output:**
|
|
```
|
|
Media API server running on port 4100
|
|
Database connected
|
|
```
|
|
|
|
**Use when:**
|
|
- Developing media features (video upload, reactions)
|
|
- Testing Media API endpoints
|
|
- Working on FFprobe integration
|
|
|
|
### Build Scripts
|
|
|
|
#### `npm run build`
|
|
Compiles TypeScript to JavaScript for production.
|
|
|
|
```bash
|
|
cd api
|
|
npm run build
|
|
```
|
|
|
|
**What it does:**
|
|
- Runs `tsc --build`
|
|
- Outputs to `dist/` directory
|
|
- Type-checks all code
|
|
- Fails on type errors
|
|
|
|
**Output:**
|
|
```
|
|
dist/
|
|
├── server.js
|
|
├── media-server.js
|
|
└── modules/
|
|
├── auth/
|
|
├── users/
|
|
└── ...
|
|
```
|
|
|
|
**Use when:**
|
|
- Preparing for production deployment
|
|
- Verifying build succeeds
|
|
- Creating Docker images
|
|
|
|
#### `npm run clean`
|
|
Removes compiled JavaScript and build artifacts.
|
|
|
|
```bash
|
|
cd api
|
|
npm run clean
|
|
```
|
|
|
|
**What it does:**
|
|
- Deletes `dist/` directory
|
|
- Removes `*.tsbuildinfo` files
|
|
|
|
**Use when:**
|
|
- Starting fresh build
|
|
- Fixing build cache issues
|
|
- Cleaning up after development
|
|
|
|
### Production Scripts
|
|
|
|
#### `npm start`
|
|
Runs the compiled API server (production mode).
|
|
|
|
```bash
|
|
cd api
|
|
npm start
|
|
```
|
|
|
|
**What it does:**
|
|
- Runs `node dist/server.js`
|
|
- Requires `npm run build` first
|
|
- Uses production environment (`NODE_ENV=production`)
|
|
|
|
**Output:**
|
|
```
|
|
Server running on port 4000
|
|
Database connected
|
|
Redis connected
|
|
```
|
|
|
|
**Use when:**
|
|
- Running in production (Docker)
|
|
- Testing production build locally
|
|
|
|
#### `npm run start:media`
|
|
Runs the compiled Media API server (production mode).
|
|
|
|
```bash
|
|
cd api
|
|
npm run start:media
|
|
```
|
|
|
|
**What it does:**
|
|
- Runs `node dist/media-server.js`
|
|
- Requires `npm run build` first
|
|
|
|
**Use when:**
|
|
- Running Media API in production
|
|
- Testing production Media API
|
|
|
|
### Code Quality Scripts
|
|
|
|
#### `npm run type-check`
|
|
Type-checks TypeScript without emitting files.
|
|
|
|
```bash
|
|
cd api
|
|
npm run type-check
|
|
```
|
|
|
|
**What it does:**
|
|
- Runs `tsc --noEmit`
|
|
- Reports type errors
|
|
- Does NOT generate files
|
|
|
|
**Output:**
|
|
```
|
|
# Success (no output)
|
|
|
|
# Errors
|
|
src/modules/auth/auth.service.ts:45:12 - error TS2345: Argument of type 'string' is not assignable to parameter of type 'number'.
|
|
```
|
|
|
|
**Use when:**
|
|
- Before committing code
|
|
- In CI/CD pipeline
|
|
- Debugging type errors
|
|
|
|
#### `npm run lint`
|
|
Runs ESLint to check code style.
|
|
|
|
```bash
|
|
cd api
|
|
npm run lint
|
|
```
|
|
|
|
**What it does:**
|
|
- Runs `eslint src/ --ext .ts`
|
|
- Reports style violations
|
|
- Checks for common errors
|
|
|
|
**Output:**
|
|
```
|
|
# Success
|
|
✔ 150 files linted, 0 errors, 0 warnings
|
|
|
|
# Errors
|
|
src/modules/auth/auth.service.ts
|
|
45:12 error 'foo' is assigned a value but never used @typescript-eslint/no-unused-vars
|
|
```
|
|
|
|
**Use when:**
|
|
- Before committing code
|
|
- Enforcing code style
|
|
- Finding potential bugs
|
|
|
|
#### `npm run lint:fix`
|
|
Automatically fixes ESLint errors where possible.
|
|
|
|
```bash
|
|
cd api
|
|
npm run lint:fix
|
|
```
|
|
|
|
**What it does:**
|
|
- Runs `eslint src/ --ext .ts --fix`
|
|
- Auto-fixes style issues (formatting, imports, etc.)
|
|
- Reports unfixable errors
|
|
|
|
**Use when:**
|
|
- After writing new code
|
|
- Cleaning up formatting
|
|
- Before commit
|
|
|
|
#### `npm run format`
|
|
Formats code with Prettier.
|
|
|
|
```bash
|
|
cd api
|
|
npm run format
|
|
```
|
|
|
|
**What it does:**
|
|
- Runs `prettier --write "src/**/*.{ts,js,json}"`
|
|
- Formats all TypeScript, JavaScript, and JSON files
|
|
- Overwrites files in place
|
|
|
|
**Use when:**
|
|
- Standardizing code format
|
|
- After merge conflicts
|
|
- Team-wide formatting
|
|
|
|
#### `npm run format:check`
|
|
Checks if code is formatted correctly (CI).
|
|
|
|
```bash
|
|
cd api
|
|
npm run format:check
|
|
```
|
|
|
|
**What it does:**
|
|
- Runs `prettier --check "src/**/*.{ts,js,json}"`
|
|
- Reports unformatted files
|
|
- Does NOT modify files
|
|
|
|
**Use when:**
|
|
- In CI/CD pipeline
|
|
- Verifying format before commit
|
|
|
|
### Database Scripts
|
|
|
|
#### `npm run prisma:migrate`
|
|
Creates and applies a new Prisma migration.
|
|
|
|
```bash
|
|
cd api
|
|
npm run prisma:migrate
|
|
# Or with name:
|
|
npx prisma migrate dev --name add_user_field
|
|
```
|
|
|
|
**What it does:**
|
|
- Prompts for migration name
|
|
- Generates SQL migration in `prisma/migrations/`
|
|
- Applies migration to development database
|
|
- Regenerates Prisma Client
|
|
|
|
**Output:**
|
|
```
|
|
✔ Enter a name for the new migration: … add_user_field
|
|
Applying migration `20260213000000_add_user_field`
|
|
✔ Generated Prisma Client to ./node_modules/@prisma/client
|
|
```
|
|
|
|
**Use when:**
|
|
- Changing database schema
|
|
- Adding new models
|
|
- Modifying fields
|
|
|
|
#### `npm run prisma:deploy`
|
|
Applies pending migrations (production).
|
|
|
|
```bash
|
|
cd api
|
|
npm run prisma:deploy
|
|
```
|
|
|
|
**What it does:**
|
|
- Runs `prisma migrate deploy`
|
|
- Applies unapplied migrations only
|
|
- Does NOT create new migrations
|
|
- Safe for production
|
|
|
|
**Output:**
|
|
```
|
|
Environment variables loaded from .env
|
|
Datasource "db": PostgreSQL database "changemaker_v2_db"
|
|
|
|
2 migrations found in prisma/migrations
|
|
|
|
Applying migration `20260213000000_add_user_field`
|
|
All migrations have been successfully applied.
|
|
```
|
|
|
|
**Use when:**
|
|
- Deploying to production
|
|
- Applying migrations in Docker
|
|
- CI/CD deployment
|
|
|
|
#### `npm run prisma:seed`
|
|
Seeds database with initial data.
|
|
|
|
```bash
|
|
cd api
|
|
npm run prisma:seed
|
|
```
|
|
|
|
**What it does:**
|
|
- Runs `tsx prisma/seed.ts`
|
|
- Creates admin user
|
|
- Creates default settings
|
|
- Creates sample blocks
|
|
|
|
**Output:**
|
|
```
|
|
Running seed command `tsx prisma/seed.ts` ...
|
|
Seeding database...
|
|
Created default settings
|
|
Created admin user: admin@example.com
|
|
Created 10 sample blocks
|
|
Seed completed successfully
|
|
```
|
|
|
|
**Use when:**
|
|
- First-time setup
|
|
- After reset
|
|
- Populating test data
|
|
|
|
#### `npm run prisma:studio`
|
|
Opens Prisma Studio (database GUI).
|
|
|
|
```bash
|
|
cd api
|
|
npm run prisma:studio
|
|
```
|
|
|
|
**What it does:**
|
|
- Runs `prisma studio`
|
|
- Opens browser at http://localhost:5555
|
|
- Shows all tables and data
|
|
- Allows CRUD operations
|
|
|
|
**Use when:**
|
|
- Inspecting database
|
|
- Manual data editing
|
|
- Debugging data issues
|
|
|
|
#### `npm run prisma:reset`
|
|
Resets database (DESTRUCTIVE).
|
|
|
|
```bash
|
|
cd api
|
|
npm run prisma:reset
|
|
```
|
|
|
|
**What it does:**
|
|
- Drops all tables
|
|
- Re-applies all migrations
|
|
- Runs seed script
|
|
- **DELETES ALL DATA**
|
|
|
|
**Output:**
|
|
```
|
|
⚠️ You are about to drop the database 'changemaker_v2_db'
|
|
All data will be lost.
|
|
|
|
Do you want to continue? [y/N]: y
|
|
|
|
Database reset successful
|
|
Migrations applied
|
|
Seed completed
|
|
```
|
|
|
|
**Use when:**
|
|
- Starting fresh in development
|
|
- Fixing migration conflicts
|
|
- **NEVER in production**
|
|
|
|
#### `npm run prisma:validate`
|
|
Validates Prisma schema.
|
|
|
|
```bash
|
|
cd api
|
|
npm run prisma:validate
|
|
```
|
|
|
|
**What it does:**
|
|
- Runs `prisma validate`
|
|
- Checks schema syntax
|
|
- Verifies relations
|
|
- Does NOT touch database
|
|
|
|
**Output:**
|
|
```
|
|
# Success
|
|
The schema is valid ✔
|
|
|
|
# Errors
|
|
Error validating model "User": Field "foo" references unknown model "Bar"
|
|
```
|
|
|
|
**Use when:**
|
|
- After editing schema
|
|
- Before creating migration
|
|
- In CI/CD pipeline
|
|
|
|
#### `npm run drizzle:push`
|
|
Pushes Drizzle schema changes to database (Media API).
|
|
|
|
```bash
|
|
cd api
|
|
npm run drizzle:push
|
|
```
|
|
|
|
**What it does:**
|
|
- Runs `drizzle-kit push`
|
|
- Syncs `src/modules/media/db/schema.ts` to database
|
|
- Does NOT create migration files
|
|
- Direct schema sync
|
|
|
|
**Output:**
|
|
```
|
|
Reading config from drizzle.config.ts
|
|
Pushing schema to database...
|
|
✔ Schema pushed successfully
|
|
```
|
|
|
|
**Use when:**
|
|
- Changing Media API tables (videos, jobs, reactions)
|
|
- Rapid prototyping (no migrations)
|
|
- Development only
|
|
|
|
#### `npm run drizzle:studio`
|
|
Opens Drizzle Studio (database GUI for Media API).
|
|
|
|
```bash
|
|
cd api
|
|
npm run drizzle:studio
|
|
```
|
|
|
|
**What it does:**
|
|
- Runs `drizzle-kit studio`
|
|
- Opens browser at http://localhost:4983
|
|
- Shows Media API tables only
|
|
|
|
**Use when:**
|
|
- Inspecting media tables
|
|
- Debugging video data
|
|
- Manual media data editing
|
|
|
|
### Testing Scripts
|
|
|
|
#### `npm test`
|
|
Runs all tests (when configured).
|
|
|
|
```bash
|
|
cd api
|
|
npm test
|
|
```
|
|
|
|
**What it does:**
|
|
- Runs Jest test suite
|
|
- Executes `*.test.ts` files
|
|
- Reports pass/fail
|
|
|
|
**Note:** Tests are part of Phase 15 (in progress).
|
|
|
|
#### `npm run test:watch`
|
|
Runs tests in watch mode.
|
|
|
|
```bash
|
|
cd api
|
|
npm run test:watch
|
|
```
|
|
|
|
**What it does:**
|
|
- Runs `jest --watch`
|
|
- Re-runs tests on file changes
|
|
|
|
#### `npm run test:coverage`
|
|
Runs tests with coverage report.
|
|
|
|
```bash
|
|
cd api
|
|
npm run test:coverage
|
|
```
|
|
|
|
**What it does:**
|
|
- Runs `jest --coverage`
|
|
- Generates coverage report in `coverage/`
|
|
|
|
### Utility Scripts
|
|
|
|
#### `npm run env:validate`
|
|
Validates required environment variables.
|
|
|
|
```bash
|
|
cd api
|
|
npm run env:validate
|
|
```
|
|
|
|
**What it does:**
|
|
- Checks `.env` has required vars
|
|
- Uses Zod validation (from `config/env.ts`)
|
|
- Fails if vars missing/invalid
|
|
|
|
**Output:**
|
|
```
|
|
# Success
|
|
✔ Environment variables valid
|
|
|
|
# Errors
|
|
Error: Missing required environment variables:
|
|
- JWT_ACCESS_SECRET
|
|
- REDIS_PASSWORD
|
|
```
|
|
|
|
**Use when:**
|
|
- After editing .env
|
|
- Before deployment
|
|
- Debugging config issues
|
|
|
|
## Admin Scripts
|
|
|
|
Location: `admin/package.json`
|
|
|
|
### Development Scripts
|
|
|
|
#### `npm run dev`
|
|
Starts Vite development server with HMR.
|
|
|
|
```bash
|
|
cd admin
|
|
npm run dev
|
|
```
|
|
|
|
**What it does:**
|
|
- Runs `vite`
|
|
- Starts dev server on port `ADMIN_PORT` (default: 3000)
|
|
- Enables Hot Module Replacement (HMR)
|
|
- Proxies API requests to `VITE_API_URL`
|
|
|
|
**Output:**
|
|
```
|
|
VITE v5.x.x ready in 500 ms
|
|
|
|
➜ Local: http://localhost:3000/
|
|
➜ Network: use --host to expose
|
|
```
|
|
|
|
**Use when:**
|
|
- Developing frontend components
|
|
- Testing UI changes
|
|
- Working on React code
|
|
|
|
### Build Scripts
|
|
|
|
#### `npm run build`
|
|
Builds production-optimized bundle.
|
|
|
|
```bash
|
|
cd admin
|
|
npm run build
|
|
```
|
|
|
|
**What it does:**
|
|
- Runs `tsc --noEmit && vite build`
|
|
- Type-checks TypeScript
|
|
- Bundles JavaScript/CSS
|
|
- Optimizes assets (minify, tree-shake)
|
|
- Outputs to `dist/`
|
|
|
|
**Output:**
|
|
```
|
|
vite v5.x.x building for production...
|
|
✓ 1245 modules transformed.
|
|
dist/index.html 0.45 kB
|
|
dist/assets/index-a1b2c3d4.js 245.67 kB │ gzip: 78.23 kB
|
|
dist/assets/index-e5f6g7h8.css 12.34 kB │ gzip: 3.45 kB
|
|
✓ built in 15.23s
|
|
```
|
|
|
|
**Use when:**
|
|
- Preparing for production deployment
|
|
- Creating Docker image
|
|
- Verifying build size
|
|
|
|
#### `npm run preview`
|
|
Previews production build locally.
|
|
|
|
```bash
|
|
cd admin
|
|
npm run preview
|
|
```
|
|
|
|
**What it does:**
|
|
- Runs `vite preview`
|
|
- Serves `dist/` directory
|
|
- Runs on port 4173 (Vite default)
|
|
|
|
**Output:**
|
|
```
|
|
➜ Local: http://localhost:4173/
|
|
➜ Network: use --host to expose
|
|
```
|
|
|
|
**Use when:**
|
|
- Testing production build
|
|
- Verifying optimizations
|
|
- Before deployment
|
|
|
|
### Code Quality Scripts
|
|
|
|
#### `npm run type-check`
|
|
Type-checks TypeScript without emitting files.
|
|
|
|
```bash
|
|
cd admin
|
|
npm run type-check
|
|
```
|
|
|
|
**What it does:**
|
|
- Runs `tsc --noEmit`
|
|
- Reports type errors
|
|
- Checks all `.ts` and `.tsx` files
|
|
|
|
**Output:**
|
|
```
|
|
# Success (no output)
|
|
|
|
# Errors
|
|
src/pages/UsersPage.tsx:123:45 - error TS2339: Property 'foo' does not exist on type 'User'.
|
|
```
|
|
|
|
**Use when:**
|
|
- Before committing code
|
|
- In CI/CD pipeline
|
|
- Debugging type errors
|
|
|
|
#### `npm run lint`
|
|
Runs ESLint to check code style.
|
|
|
|
```bash
|
|
cd admin
|
|
npm run lint
|
|
```
|
|
|
|
**What it does:**
|
|
- Runs `eslint src/ --ext .ts,.tsx`
|
|
- Reports style violations
|
|
- Checks React best practices
|
|
|
|
**Output:**
|
|
```
|
|
# Success
|
|
✔ 85 files linted, 0 errors, 0 warnings
|
|
|
|
# Errors
|
|
src/pages/UsersPage.tsx
|
|
123:45 error 'foo' is assigned a value but never used @typescript-eslint/no-unused-vars
|
|
200:10 warning Missing dependency in useEffect react-hooks/exhaustive-deps
|
|
```
|
|
|
|
**Use when:**
|
|
- Before committing code
|
|
- Enforcing code style
|
|
- Finding potential bugs
|
|
|
|
#### `npm run lint:fix`
|
|
Automatically fixes ESLint errors where possible.
|
|
|
|
```bash
|
|
cd admin
|
|
npm run lint:fix
|
|
```
|
|
|
|
**What it does:**
|
|
- Runs `eslint src/ --ext .ts,.tsx --fix`
|
|
- Auto-fixes style issues
|
|
- Reports unfixable errors
|
|
|
|
**Use when:**
|
|
- After writing new code
|
|
- Cleaning up formatting
|
|
- Before commit
|
|
|
|
#### `npm run format`
|
|
Formats code with Prettier.
|
|
|
|
```bash
|
|
cd admin
|
|
npm run format
|
|
```
|
|
|
|
**What it does:**
|
|
- Runs `prettier --write "src/**/*.{ts,tsx,css,json}"`
|
|
- Formats all source files
|
|
- Overwrites files in place
|
|
|
|
**Use when:**
|
|
- Standardizing code format
|
|
- After merge conflicts
|
|
- Team-wide formatting
|
|
|
|
#### `npm run format:check`
|
|
Checks if code is formatted correctly (CI).
|
|
|
|
```bash
|
|
cd admin
|
|
npm run format:check
|
|
```
|
|
|
|
**What it does:**
|
|
- Runs `prettier --check "src/**/*.{ts,tsx,css,json}"`
|
|
- Reports unformatted files
|
|
- Does NOT modify files
|
|
|
|
**Use when:**
|
|
- In CI/CD pipeline
|
|
- Verifying format before commit
|
|
|
|
### Testing Scripts
|
|
|
|
#### `npm test`
|
|
Runs all tests (when configured).
|
|
|
|
```bash
|
|
cd admin
|
|
npm test
|
|
```
|
|
|
|
**What it does:**
|
|
- Runs Vitest test suite
|
|
- Executes `*.test.tsx` and `*.spec.tsx` files
|
|
- Reports pass/fail
|
|
|
|
**Note:** Tests are part of Phase 15 (in progress).
|
|
|
|
#### `npm run test:watch`
|
|
Runs tests in watch mode.
|
|
|
|
```bash
|
|
cd admin
|
|
npm run test:watch
|
|
```
|
|
|
|
**What it does:**
|
|
- Runs `vitest`
|
|
- Re-runs tests on file changes
|
|
|
|
#### `npm run test:ui`
|
|
Runs tests with UI (Vitest UI).
|
|
|
|
```bash
|
|
cd admin
|
|
npm run test:ui
|
|
```
|
|
|
|
**What it does:**
|
|
- Runs `vitest --ui`
|
|
- Opens browser with test UI
|
|
- Shows test results visually
|
|
|
|
#### `npm run test:coverage`
|
|
Runs tests with coverage report.
|
|
|
|
```bash
|
|
cd admin
|
|
npm run test:coverage
|
|
```
|
|
|
|
**What it does:**
|
|
- Runs `vitest --coverage`
|
|
- Generates coverage report in `coverage/`
|
|
|
|
### Utility Scripts
|
|
|
|
#### `npm run clean`
|
|
Removes build artifacts and cache.
|
|
|
|
```bash
|
|
cd admin
|
|
npm run clean
|
|
```
|
|
|
|
**What it does:**
|
|
- Deletes `dist/` directory
|
|
- Removes `node_modules/.vite/` cache
|
|
- Removes `tsconfig.tsbuildinfo`
|
|
|
|
**Use when:**
|
|
- Starting fresh build
|
|
- Fixing build cache issues
|
|
- Cleaning up after development
|
|
|
|
## Docker Commands
|
|
|
|
When running services in Docker, use `docker compose exec` to run npm scripts:
|
|
|
|
### API in Docker
|
|
|
|
```bash
|
|
# Development server (already running via docker compose up)
|
|
docker compose logs -f api
|
|
|
|
# Type-check
|
|
docker compose exec api npm run type-check
|
|
|
|
# Prisma migrate
|
|
docker compose exec api npx prisma migrate dev --name add_field
|
|
|
|
# Prisma Studio
|
|
docker compose exec api npx prisma studio
|
|
|
|
# Prisma seed
|
|
docker compose exec api npx prisma db seed
|
|
|
|
# Drizzle push (Media API)
|
|
docker compose exec api npx drizzle-kit push
|
|
|
|
# Lint
|
|
docker compose exec api npm run lint
|
|
|
|
# Format
|
|
docker compose exec api npm run format
|
|
```
|
|
|
|
### Admin in Docker
|
|
|
|
```bash
|
|
# Development server (already running via docker compose up)
|
|
docker compose logs -f admin
|
|
|
|
# Type-check
|
|
docker compose exec admin npm run type-check
|
|
|
|
# Lint
|
|
docker compose exec admin npm run lint
|
|
|
|
# Build
|
|
docker compose exec admin npm run build
|
|
```
|
|
|
|
### Rebuild Containers
|
|
|
|
```bash
|
|
# Rebuild after package.json changes
|
|
docker compose build --no-cache api admin
|
|
|
|
# Restart services
|
|
docker compose restart api admin
|
|
```
|
|
|
|
## Script Chaining
|
|
|
|
### Sequential Execution (&&)
|
|
|
|
Run scripts in sequence, stop on first failure:
|
|
|
|
```bash
|
|
# Type-check, then build
|
|
cd api
|
|
npm run type-check && npm run build
|
|
|
|
# Lint, format, type-check
|
|
cd admin
|
|
npm run lint && npm run format && npm run type-check
|
|
|
|
# Full quality check before commit
|
|
cd api
|
|
npm run lint:fix && npm run format && npm run type-check && npm test
|
|
```
|
|
|
|
### Parallel Execution (npm-run-all)
|
|
|
|
Install `npm-run-all` for parallel script execution:
|
|
|
|
```bash
|
|
# Install (project root)
|
|
npm install --save-dev npm-run-all
|
|
|
|
# Add to package.json
|
|
{
|
|
"scripts": {
|
|
"check": "npm-run-all --parallel type-check lint test"
|
|
}
|
|
}
|
|
|
|
# Run all checks in parallel
|
|
npm run check
|
|
```
|
|
|
|
### Pre/Post Hooks
|
|
|
|
npm automatically runs `pre*` and `post*` scripts:
|
|
|
|
```bash
|
|
# package.json
|
|
{
|
|
"scripts": {
|
|
"prebuild": "npm run clean",
|
|
"build": "tsc --build",
|
|
"postbuild": "npm run copy-assets"
|
|
}
|
|
}
|
|
|
|
# Running npm run build executes:
|
|
# 1. npm run prebuild (clean)
|
|
# 2. npm run build (tsc)
|
|
# 3. npm run postbuild (copy-assets)
|
|
```
|
|
|
|
## Common Script Combinations
|
|
|
|
### Full Development Setup
|
|
|
|
```bash
|
|
# 1. Install dependencies
|
|
cd api && npm install && cd ..
|
|
cd admin && npm install && cd ..
|
|
|
|
# 2. Setup database
|
|
cd api
|
|
npx prisma migrate deploy
|
|
npx prisma db seed
|
|
cd ..
|
|
|
|
# 3. Start development servers
|
|
# Option A: Docker
|
|
docker compose up -d api admin
|
|
|
|
# Option B: Local
|
|
cd api && npm run dev # Terminal 1
|
|
cd admin && npm run dev # Terminal 2
|
|
```
|
|
|
|
### Pre-Commit Quality Check
|
|
|
|
```bash
|
|
# API quality check
|
|
cd api
|
|
npm run lint:fix
|
|
npm run format
|
|
npm run type-check
|
|
# npm test # When tests available
|
|
cd ..
|
|
|
|
# Admin quality check
|
|
cd admin
|
|
npm run lint:fix
|
|
npm run format
|
|
npm run type-check
|
|
# npm test # When tests available
|
|
cd ..
|
|
|
|
# Commit if all pass
|
|
git add .
|
|
git commit -m "feat: add new feature"
|
|
```
|
|
|
|
### Production Build
|
|
|
|
```bash
|
|
# Build API
|
|
cd api
|
|
npm run clean
|
|
npm run build
|
|
cd ..
|
|
|
|
# Build Admin
|
|
cd admin
|
|
npm run clean
|
|
npm run build
|
|
cd ..
|
|
|
|
# Build Docker images
|
|
docker compose build api admin
|
|
|
|
# Start production services
|
|
docker compose -f docker-compose.yml up -d api admin
|
|
```
|
|
|
|
### Database Migration Workflow
|
|
|
|
```bash
|
|
# 1. Edit schema
|
|
cd api
|
|
vi prisma/schema.prisma
|
|
|
|
# 2. Validate schema
|
|
npx prisma validate
|
|
|
|
# 3. Create migration
|
|
npx prisma migrate dev --name add_user_field
|
|
|
|
# 4. Verify migration SQL
|
|
cat prisma/migrations/20260213000000_add_user_field/migration.sql
|
|
|
|
# 5. Test on clean database
|
|
npx prisma migrate reset # WARNING: Deletes data
|
|
npx prisma migrate deploy
|
|
npx prisma db seed
|
|
|
|
# 6. Commit migration
|
|
git add prisma/migrations/ prisma/schema.prisma
|
|
git commit -m "feat(db): add field to User model"
|
|
```
|
|
|
|
### Database Inspection
|
|
|
|
```bash
|
|
# Prisma Studio (main API)
|
|
cd api
|
|
npx prisma studio
|
|
# Open http://localhost:5555
|
|
|
|
# Drizzle Studio (Media API)
|
|
cd api
|
|
npx drizzle-kit studio
|
|
# Open http://localhost:4983
|
|
|
|
# Direct PostgreSQL query
|
|
docker compose exec v2-postgres psql -U changemaker_v2 -d changemaker_v2_db
|
|
# Run SQL queries
|
|
```
|
|
|
|
### Full Type Check
|
|
|
|
```bash
|
|
# Type-check both projects
|
|
cd api && npx tsc --noEmit && cd ..
|
|
cd admin && npx tsc --noEmit && cd ..
|
|
|
|
# Or create root script (package.json in project root)
|
|
{
|
|
"scripts": {
|
|
"type-check": "cd api && npm run type-check && cd ../admin && npm run type-check"
|
|
}
|
|
}
|
|
|
|
# Run from root
|
|
npm run type-check
|
|
```
|
|
|
|
## CI/CD Integration
|
|
|
|
### GitHub Actions Example
|
|
|
|
```yaml
|
|
name: CI
|
|
|
|
on: [push, pull_request]
|
|
|
|
jobs:
|
|
api:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v3
|
|
- uses: actions/setup-node@v3
|
|
with:
|
|
node-version: '20'
|
|
|
|
- name: Install dependencies
|
|
working-directory: ./api
|
|
run: npm ci
|
|
|
|
- name: Type check
|
|
working-directory: ./api
|
|
run: npm run type-check
|
|
|
|
- name: Lint
|
|
working-directory: ./api
|
|
run: npm run lint
|
|
|
|
- name: Format check
|
|
working-directory: ./api
|
|
run: npm run format:check
|
|
|
|
- name: Test
|
|
working-directory: ./api
|
|
run: npm test
|
|
|
|
- name: Build
|
|
working-directory: ./api
|
|
run: npm run build
|
|
|
|
admin:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v3
|
|
- uses: actions/setup-node@v3
|
|
with:
|
|
node-version: '20'
|
|
|
|
- name: Install dependencies
|
|
working-directory: ./admin
|
|
run: npm ci
|
|
|
|
- name: Type check
|
|
working-directory: ./admin
|
|
run: npm run type-check
|
|
|
|
- name: Lint
|
|
working-directory: ./admin
|
|
run: npm run lint
|
|
|
|
- name: Format check
|
|
working-directory: ./admin
|
|
run: npm run format:check
|
|
|
|
- name: Test
|
|
working-directory: ./admin
|
|
run: npm test
|
|
|
|
- name: Build
|
|
working-directory: ./admin
|
|
run: npm run build
|
|
```
|
|
|
|
## Troubleshooting
|
|
|
|
### Script Not Found
|
|
|
|
**Problem:**
|
|
```
|
|
npm ERR! missing script: dev
|
|
```
|
|
|
|
**Solution:**
|
|
- Check `package.json` has the script defined
|
|
- Verify you're in correct directory (`api/` or `admin/`)
|
|
- Run `npm install` to ensure dependencies installed
|
|
|
|
### Permission Errors
|
|
|
|
**Problem:**
|
|
```
|
|
Error: EACCES: permission denied
|
|
```
|
|
|
|
**Solution:**
|
|
- Don't use `sudo npm` (creates permission issues)
|
|
- Fix npm permissions: `sudo chown -R $(whoami) ~/.npm`
|
|
- Or use nvm for user-level Node.js installation
|
|
|
|
### Port Already in Use
|
|
|
|
**Problem:**
|
|
```
|
|
Error: listen EADDRINUSE: address already in use :::4000
|
|
```
|
|
|
|
**Solution:**
|
|
- Find and kill process using port: `lsof -ti:4000 | xargs kill -9`
|
|
- Or change port in `.env`: `API_PORT=4002`
|
|
- Or use Docker (isolated ports)
|
|
|
|
### TypeScript Errors on Build
|
|
|
|
**Problem:**
|
|
```
|
|
src/modules/auth/auth.service.ts:45:12 - error TS2339
|
|
```
|
|
|
|
**Solution:**
|
|
- Fix type errors in code
|
|
- Or check `tsconfig.json` is correct
|
|
- Or update type definitions: `npm install --save-dev @types/node@latest`
|
|
|
|
### Prisma Migration Conflicts
|
|
|
|
**Problem:**
|
|
```
|
|
Error: P3005 The database schema is not in sync with the migration history
|
|
```
|
|
|
|
**Solution:**
|
|
- Development: `npx prisma migrate reset` (DELETES DATA)
|
|
- Production: `npx prisma migrate resolve --applied <migration_name>`
|
|
- Or create new migration to fix state
|
|
|
|
### npm install Failures
|
|
|
|
**Problem:**
|
|
```
|
|
npm ERR! code ERESOLVE
|
|
npm ERR! ERESOLVE unable to resolve dependency tree
|
|
```
|
|
|
|
**Solution:**
|
|
- Clear cache: `npm cache clean --force`
|
|
- Delete and reinstall: `rm -rf node_modules package-lock.json && npm install`
|
|
- Use `--legacy-peer-deps` flag: `npm install --legacy-peer-deps`
|
|
|
|
### Vite Build Errors
|
|
|
|
**Problem:**
|
|
```
|
|
Error: Could not resolve entry module (index.html)
|
|
```
|
|
|
|
**Solution:**
|
|
- Ensure `index.html` exists in `admin/`
|
|
- Check `vite.config.ts` has correct root
|
|
- Clear cache: `rm -rf node_modules/.vite && npm run dev`
|
|
|
|
## Best Practices
|
|
|
|
### Script Naming Conventions
|
|
|
|
- **dev** - Development mode with hot reload
|
|
- **build** - Production build
|
|
- **start** - Run production build
|
|
- **test** - Run tests
|
|
- **lint** - Check code style
|
|
- **lint:fix** - Auto-fix code style
|
|
- **format** - Format code
|
|
- **type-check** - TypeScript validation
|
|
- **clean** - Remove build artifacts
|
|
|
|
### Script Organization
|
|
|
|
Group related scripts:
|
|
|
|
```json
|
|
{
|
|
"scripts": {
|
|
// Development
|
|
"dev": "tsx watch src/server.ts",
|
|
"dev:media": "tsx watch src/media-server.ts",
|
|
|
|
// Build
|
|
"build": "tsc --build",
|
|
"clean": "rm -rf dist",
|
|
|
|
// Quality
|
|
"type-check": "tsc --noEmit",
|
|
"lint": "eslint src/ --ext .ts",
|
|
"lint:fix": "eslint src/ --ext .ts --fix",
|
|
"format": "prettier --write \"src/**/*.ts\"",
|
|
|
|
// Database
|
|
"prisma:migrate": "prisma migrate dev",
|
|
"prisma:deploy": "prisma migrate deploy",
|
|
"prisma:seed": "tsx prisma/seed.ts"
|
|
}
|
|
}
|
|
```
|
|
|
|
### Environment-Specific Scripts
|
|
|
|
Use cross-env for environment variables:
|
|
|
|
```bash
|
|
npm install --save-dev cross-env
|
|
```
|
|
|
|
```json
|
|
{
|
|
"scripts": {
|
|
"dev": "cross-env NODE_ENV=development tsx watch src/server.ts",
|
|
"build": "cross-env NODE_ENV=production tsc --build",
|
|
"test": "cross-env NODE_ENV=test jest"
|
|
}
|
|
}
|
|
```
|
|
|
|
### Script Documentation
|
|
|
|
Add comments in package.json:
|
|
|
|
```json
|
|
{
|
|
"scripts": {
|
|
"// Development": "",
|
|
"dev": "tsx watch src/server.ts",
|
|
|
|
"// Build": "",
|
|
"build": "tsc --build",
|
|
|
|
"// Quality": "",
|
|
"type-check": "tsc --noEmit"
|
|
}
|
|
}
|
|
```
|
|
|
|
## Quick Reference
|
|
|
|
### API Scripts
|
|
```bash
|
|
npm run dev # Dev server (port 4000)
|
|
npm run dev:media # Media API dev (port 4100)
|
|
npm run build # Build for production
|
|
npm start # Run production server
|
|
npm run type-check # TypeScript validation
|
|
npm run lint # ESLint check
|
|
npm run lint:fix # ESLint auto-fix
|
|
npm run format # Prettier format
|
|
npx prisma migrate dev # Create migration
|
|
npx prisma migrate deploy # Apply migrations
|
|
npx prisma db seed # Seed database
|
|
npx prisma studio # Database GUI
|
|
npx drizzle-kit push # Push Media schema
|
|
```
|
|
|
|
### Admin Scripts
|
|
```bash
|
|
npm run dev # Dev server (port 3000)
|
|
npm run build # Build for production
|
|
npm run preview # Preview production build
|
|
npm run type-check # TypeScript validation
|
|
npm run lint # ESLint check
|
|
npm run lint:fix # ESLint auto-fix
|
|
npm run format # Prettier format
|
|
npm test # Run tests
|
|
npm run test:ui # Test UI
|
|
```
|
|
|
|
### Docker Scripts
|
|
```bash
|
|
docker compose exec api npm run type-check
|
|
docker compose exec api npx prisma migrate dev
|
|
docker compose exec admin npm run lint
|
|
docker compose build --no-cache api admin
|
|
```
|
|
|
|
## Related Documentation
|
|
|
|
- **Setup:** [Local Development Setup](local-setup.md)
|
|
- **Workflow:** [Docker Workflow](docker-workflow.md)
|
|
- **Database:** [Migrations Guide](migrations.md)
|
|
- **Testing:** [Testing Guide](testing.md)
|
|
- **Code Style:** [Code Style Guide](code-style.md)
|
|
- **Debugging:** [Debugging Guide](debugging.md)
|
|
|
|
## Summary
|
|
|
|
You now know:
|
|
- ✅ All available npm scripts in API and Admin
|
|
- ✅ What each script does and when to use it
|
|
- ✅ How to run scripts in Docker containers
|
|
- ✅ How to chain scripts together
|
|
- ✅ Common script combinations for workflows
|
|
- ✅ How to troubleshoot script errors
|
|
- ✅ Best practices for script organization
|
|
|
|
**Quick Start:**
|
|
```bash
|
|
# Development
|
|
cd api && npm run dev
|
|
cd admin && npm run dev
|
|
|
|
# Pre-commit
|
|
cd api && npm run lint:fix && npm run type-check
|
|
cd admin && npm run lint:fix && npm run type-check
|
|
|
|
# Production build
|
|
cd api && npm run build
|
|
cd admin && npm run build
|
|
```
|