-
Notifications
You must be signed in to change notification settings - Fork 1
Closed
Labels
dependenciesDependency updatesDependency updatesenhancementNew feature or requestNew feature or requestperformancePerformance improvementsPerformance improvementstech-debtTechnical debt cleanupTechnical debt cleanup
Description
Current Status
Total Size: 367 MB node_modules
- Root: 317 MB
- packages/core: 25 MB
- packages/cli: 25 MB
Issue: Large dependency footprint impacts:
- ⏱️ Installation time
- 💾 Disk space usage
- 🔄 CI/CD performance
- 📦 Repository size (via .gitignore patterns)
Analysis Required
1. Dependency Audit
# Find largest packages
npx npkgs --sort=size --limit=20
# Check for duplicates
npm ls --all | grep -E "deduped|ERR"
# Identify unused dependencies
npx depcheck2. Workspace Optimization
Current structure may have redundancy:
node_modules/ (317 MB)
packages/core/node_modules/ (25 MB)
packages/cli/node_modules/ (25 MB)
Potential issues:
- Dependencies duplicated across workspaces
- TypeScript installed 3 times (root + 2 packages)
- @types/* packages duplicated
Optimization Strategies
1. Migrate to pnpm (Est. savings: 40-50%)
pnpm uses hard links and content-addressable storage:
# Before (npm)
367 MB total
# After (pnpm) - estimated
~180-220 MB (40-50% reduction)Benefits:
- Deduplicated storage across projects
- Faster installs (parallel + cache)
- Stricter dependency resolution
- Disk space savings
Migration:
npm install -g pnpm
rm -rf node_modules packages/*/node_modules
pnpm installEffort: 1-2 hours (test compatibility)
2. Deduplicate Dependencies (Est. savings: 10-15%)
# Find duplicates
npm dedupe
# Or manually in package.json
npm ls typescript
# If multiple versions → lock to one
# After deduplication
npm installEffort: 30 minutes
3. Remove Unused Dependencies (Est. savings: 5-10%)
# Audit for unused packages
npx depcheck
# Remove unused devDependencies
npm uninstall <unused-package>Common candidates:
- Unused testing utilities
- Deprecated packages
- Redundant type definitions
- Development tools no longer needed
Effort: 1 hour
4. Optimize Workspace Dependencies (Est. savings: 5-10%)
Current inefficiency:
// Root package.json
"devDependencies": {
"typescript": "4.8.4",
"@types/node": "^18.19.129"
}
// packages/core/package.json
"devDependencies": {
"typescript": "5.9.3", // ← Different version!
"@types/node": "^20.19.23" // ← Different version!
}Solution: Hoist common devDependencies to root:
// Root only
"devDependencies": {
"typescript": "5.9.3",
"@types/node": "^20.19.23",
"jest": "^30.0.5",
"eslint": "^9.38.0"
}
// Packages: remove duplicatesEffort: 1-2 hours
5. Use Lighter Alternatives (Est. savings: variable)
Consider swapping heavy packages:
| Current | Size | Alternative | Size | Savings |
|---|---|---|---|---|
| moment.js | 15 MB | date-fns | 4 MB | -73% |
| lodash | 4 MB | lodash-es | 1 MB | -75% |
Check current heavyweights:
npx npkgs --sort=size | head -20Effort: 2-3 hours (per swap)
Implementation Plan
Phase 1: Analysis (1 hour)
- Run
npx npkgs --sort=size - Run
npm ls --all | grep -E "deduped" - Run
npx depcheck - Document findings
Phase 2: Quick Wins (1-2 hours)
- Run
npm dedupe - Remove unused dependencies
- Hoist common devDependencies
Phase 3: pnpm Migration (2-3 hours)
- Install pnpm globally
- Test pnpm install
- Update CI/CD workflows
- Update documentation
- Verify all scripts work
Phase 4: Validation
-
npm install(orpnpm install) succeeds -
npm run test:allpasses (100%) -
npm run buildsucceeds - Plugin works in Obsidian
- CI/CD pipelines work
Success Metrics
| Metric | Before | Target | Improvement |
|---|---|---|---|
| Total size | 367 MB | < 200 MB | -45% |
| Install time | Baseline | -30% | Faster |
| CI time | Baseline | -20% | Faster |
| Duplicates | TBD | 0 | Cleaner |
pnpm Migration Benefits
Performance
- ⚡ 2-3x faster installs
- 🚀 Better monorepo support
- 💾 40-50% disk space savings
- 🔄 Shared cache across projects
Strictness
- ✅ Prevents phantom dependencies
- ✅ Stricter module resolution
- ✅ Better workspace isolation
Compatibility
- ✅ npm-compatible commands
- ✅ Works with npm scripts
- ✅ GitHub Actions support
Risks & Mitigation
Risk: pnpm compatibility issues
Mitigation: Test thoroughly, keep npm as fallback
Risk: CI/CD breaks
Mitigation: Update workflows incrementally, test in branch
Risk: Different lockfile format
Mitigation: Commit pnpm-lock.yaml, document in README
Acceptance Criteria
- node_modules < 200 MB total
- No duplicate dependencies (npm ls clean)
- No unused dependencies (depcheck clean)
- Install time reduced by 20%+
- All tests pass
- CI/CD works correctly
- Documentation updated
Priority
🟢 LOW-MEDIUM - Nice to have, improves developer experience but not critical.
Estimated Effort
- Quick wins (dedupe + cleanup): 2-3 hours
- pnpm migration: 3-4 hours
- Total: 5-7 hours
Next Steps
- Run analysis commands (Phase 1)
- Report findings in this issue
- Decide on pnpm migration (discuss with team)
- Implement in order of priority
Related Issues
- Complements Issue chore: update critical dependencies (Playwright, esbuild, commander) #155 (dependency updates)
- May impact CI/CD performance
Labels
dependencies, tech-debt, performance, enhancement
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
dependenciesDependency updatesDependency updatesenhancementNew feature or requestNew feature or requestperformancePerformance improvementsPerformance improvementstech-debtTechnical debt cleanupTechnical debt cleanup