137 lines
3.0 KiB
Markdown
137 lines
3.0 KiB
Markdown
|
|
# pnpm Migration Guide
|
||
|
|
|
||
|
|
This guide explains the package management setup for the Sankofa Phoenix project.
|
||
|
|
|
||
|
|
## Current Status
|
||
|
|
|
||
|
|
The project supports both **pnpm** (recommended) and **npm** (fallback) for package management.
|
||
|
|
|
||
|
|
- **Root**: Uses `pnpm` with `pnpm-lock.yaml`
|
||
|
|
- **API**: Supports both `pnpm` and `npm` (via `.npmrc` configuration)
|
||
|
|
- **Portal**: Supports both `pnpm` and `npm` (via `.npmrc` configuration)
|
||
|
|
|
||
|
|
## Why pnpm?
|
||
|
|
|
||
|
|
pnpm offers several advantages:
|
||
|
|
|
||
|
|
1. **Disk Space Efficiency**: Shared dependency store across projects
|
||
|
|
2. **Speed**: Faster installation due to content-addressable storage
|
||
|
|
3. **Strict Dependency Resolution**: Prevents phantom dependencies
|
||
|
|
4. **Better Monorepo Support**: Excellent for managing multiple packages
|
||
|
|
|
||
|
|
## Installation
|
||
|
|
|
||
|
|
### Using pnpm (Recommended)
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Install pnpm globally
|
||
|
|
npm install -g pnpm
|
||
|
|
|
||
|
|
# Or using corepack (Node.js 16.13+)
|
||
|
|
corepack enable
|
||
|
|
corepack prepare pnpm@latest --activate
|
||
|
|
|
||
|
|
# Install dependencies
|
||
|
|
pnpm install
|
||
|
|
|
||
|
|
# In API directory
|
||
|
|
cd api
|
||
|
|
pnpm install
|
||
|
|
|
||
|
|
# In Portal directory
|
||
|
|
cd portal
|
||
|
|
pnpm install
|
||
|
|
```
|
||
|
|
|
||
|
|
### Using npm (Fallback)
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Install dependencies with npm
|
||
|
|
npm install
|
||
|
|
|
||
|
|
# In API directory
|
||
|
|
cd api
|
||
|
|
npm install
|
||
|
|
|
||
|
|
# In Portal directory
|
||
|
|
cd portal
|
||
|
|
npm install
|
||
|
|
```
|
||
|
|
|
||
|
|
## CI/CD
|
||
|
|
|
||
|
|
The CI/CD pipeline (`.github/workflows/ci.yml`) supports both package managers:
|
||
|
|
|
||
|
|
```yaml
|
||
|
|
- name: Install dependencies
|
||
|
|
run: npm install --frozen-lockfile || pnpm install --frozen-lockfile
|
||
|
|
```
|
||
|
|
|
||
|
|
This ensures CI works regardless of which package manager is used locally.
|
||
|
|
|
||
|
|
## Migration Steps (Optional)
|
||
|
|
|
||
|
|
If you want to fully migrate to pnpm:
|
||
|
|
|
||
|
|
1. **Remove package-lock.json files** (if any exist):
|
||
|
|
```bash
|
||
|
|
find . -name "package-lock.json" -not -path "*/node_modules/*" -delete
|
||
|
|
```
|
||
|
|
|
||
|
|
2. **Install with pnpm**:
|
||
|
|
```bash
|
||
|
|
pnpm install
|
||
|
|
```
|
||
|
|
|
||
|
|
3. **Verify installation**:
|
||
|
|
```bash
|
||
|
|
pnpm list
|
||
|
|
```
|
||
|
|
|
||
|
|
4. **Update CI/CD** (optional):
|
||
|
|
- The current CI already supports both, so no changes needed
|
||
|
|
- You can make it pnpm-only if desired
|
||
|
|
|
||
|
|
## Benefits of Current Setup
|
||
|
|
|
||
|
|
The current flexible setup provides:
|
||
|
|
|
||
|
|
- ✅ **Backward Compatibility**: Works with both package managers
|
||
|
|
- ✅ **Team Flexibility**: Team members can use their preferred tool
|
||
|
|
- ✅ **CI Resilience**: CI works with either package manager
|
||
|
|
- ✅ **Gradual Migration**: Can migrate at own pace
|
||
|
|
|
||
|
|
## Recommended Practice
|
||
|
|
|
||
|
|
While both are supported, we recommend:
|
||
|
|
|
||
|
|
- **Local Development**: Use `pnpm` for better performance
|
||
|
|
- **CI/CD**: Current setup (both supported) is fine
|
||
|
|
- **Documentation**: Update to reflect pnpm as primary, npm as fallback
|
||
|
|
|
||
|
|
## Troubleshooting
|
||
|
|
|
||
|
|
### Module not found errors
|
||
|
|
|
||
|
|
If you encounter module resolution issues:
|
||
|
|
|
||
|
|
1. Delete `node_modules` and lock file
|
||
|
|
2. Reinstall with your chosen package manager:
|
||
|
|
```bash
|
||
|
|
rm -rf node_modules package-lock.json
|
||
|
|
pnpm install # or npm install
|
||
|
|
```
|
||
|
|
|
||
|
|
### Lock file conflicts
|
||
|
|
|
||
|
|
If you see conflicts between `package-lock.json` and `pnpm-lock.yaml`:
|
||
|
|
|
||
|
|
- Use `.gitignore` to exclude `package-lock.json` (already configured)
|
||
|
|
- Team should agree on primary package manager
|
||
|
|
- Document choice in README
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
**Last Updated**: 2025-01-09
|
||
|
|
|