feat: Complete fleet — 94 skills across 10+ domains
Pulled ALL skills from 15 source repositories: - anthropics/skills: 16 (docs, design, MCP, testing) - obra/superpowers: 14 (TDD, debugging, agents, planning) - coreyhaines31/marketingskills: 25 (marketing, CRO, SEO, growth) - better-auth/skills: 5 (auth patterns) - vercel-labs/agent-skills: 5 (React, design, Vercel) - antfu/skills: 16 (Vue, Vite, Vitest, pnpm, Turborepo) - Plus 13 individual skills from various repos Mosaic Stack is not limited to coding — the Orchestrator and subagents serve coding, business, design, marketing, writing, logistics, analysis, and more. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
250
skills/pnpm/references/features-peer-deps.md
Normal file
250
skills/pnpm/references/features-peer-deps.md
Normal file
@@ -0,0 +1,250 @@
|
||||
---
|
||||
name: pnpm-peer-dependencies
|
||||
description: Handling peer dependencies with auto-install and resolution rules
|
||||
---
|
||||
|
||||
# pnpm Peer Dependencies
|
||||
|
||||
pnpm has strict peer dependency handling by default. It provides configuration options to control how peer dependencies are resolved and reported.
|
||||
|
||||
## Auto-Install Peer Dependencies
|
||||
|
||||
By default, pnpm automatically installs peer dependencies:
|
||||
|
||||
```ini
|
||||
# .npmrc (default is true since pnpm v8)
|
||||
auto-install-peers=true
|
||||
```
|
||||
|
||||
When enabled, pnpm automatically adds missing peer dependencies based on the best matching version.
|
||||
|
||||
## Strict Peer Dependencies
|
||||
|
||||
Control whether peer dependency issues cause errors:
|
||||
|
||||
```ini
|
||||
# Fail on peer dependency issues (default: false)
|
||||
strict-peer-dependencies=true
|
||||
```
|
||||
|
||||
When strict, pnpm will fail if:
|
||||
- Peer dependency is missing
|
||||
- Installed version doesn't match required range
|
||||
|
||||
## Peer Dependency Rules
|
||||
|
||||
Configure peer dependency behavior in `package.json`:
|
||||
|
||||
```json
|
||||
{
|
||||
"pnpm": {
|
||||
"peerDependencyRules": {
|
||||
"ignoreMissing": ["@babel/*", "eslint"],
|
||||
"allowedVersions": {
|
||||
"react": "17 || 18"
|
||||
},
|
||||
"allowAny": ["@types/*"]
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### ignoreMissing
|
||||
|
||||
Suppress warnings for missing peer dependencies:
|
||||
|
||||
```json
|
||||
{
|
||||
"pnpm": {
|
||||
"peerDependencyRules": {
|
||||
"ignoreMissing": [
|
||||
"@babel/*",
|
||||
"eslint",
|
||||
"webpack"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Use patterns:
|
||||
- `"react"` - exact package name
|
||||
- `"@babel/*"` - all packages in scope
|
||||
- `"*"` - all packages (not recommended)
|
||||
|
||||
### allowedVersions
|
||||
|
||||
Allow specific versions that would otherwise cause warnings:
|
||||
|
||||
```json
|
||||
{
|
||||
"pnpm": {
|
||||
"peerDependencyRules": {
|
||||
"allowedVersions": {
|
||||
"react": "17 || 18",
|
||||
"webpack": "4 || 5",
|
||||
"@types/react": "*"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### allowAny
|
||||
|
||||
Allow any version for specified peer dependencies:
|
||||
|
||||
```json
|
||||
{
|
||||
"pnpm": {
|
||||
"peerDependencyRules": {
|
||||
"allowAny": ["@types/*", "eslint"]
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Adding Peer Dependencies via Hooks
|
||||
|
||||
Use `.pnpmfile.cjs` to add missing peer dependencies:
|
||||
|
||||
```js
|
||||
// .pnpmfile.cjs
|
||||
function readPackage(pkg, context) {
|
||||
// Add missing peer dependency
|
||||
if (pkg.name === 'problematic-package') {
|
||||
pkg.peerDependencies = {
|
||||
...pkg.peerDependencies,
|
||||
react: '*'
|
||||
}
|
||||
}
|
||||
return pkg
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
hooks: {
|
||||
readPackage
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Peer Dependencies in Workspaces
|
||||
|
||||
Workspace packages can satisfy peer dependencies:
|
||||
|
||||
```json
|
||||
// packages/app/package.json
|
||||
{
|
||||
"dependencies": {
|
||||
"react": "^18.2.0",
|
||||
"@myorg/components": "workspace:^"
|
||||
}
|
||||
}
|
||||
|
||||
// packages/components/package.json
|
||||
{
|
||||
"peerDependencies": {
|
||||
"react": "^17.0.0 || ^18.0.0"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
The workspace `app` provides `react` which satisfies `components`' peer dependency.
|
||||
|
||||
## Common Scenarios
|
||||
|
||||
### Monorepo with Shared React
|
||||
|
||||
```yaml
|
||||
# pnpm-workspace.yaml
|
||||
catalog:
|
||||
react: ^18.2.0
|
||||
react-dom: ^18.2.0
|
||||
```
|
||||
|
||||
```json
|
||||
// packages/ui/package.json
|
||||
{
|
||||
"peerDependencies": {
|
||||
"react": "^18.0.0",
|
||||
"react-dom": "^18.0.0"
|
||||
}
|
||||
}
|
||||
|
||||
// apps/web/package.json
|
||||
{
|
||||
"dependencies": {
|
||||
"react": "catalog:",
|
||||
"react-dom": "catalog:",
|
||||
"@myorg/ui": "workspace:^"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Suppress ESLint Plugin Warnings
|
||||
|
||||
```json
|
||||
{
|
||||
"pnpm": {
|
||||
"peerDependencyRules": {
|
||||
"ignoreMissing": [
|
||||
"eslint",
|
||||
"@typescript-eslint/parser"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Allow Multiple Major Versions
|
||||
|
||||
```json
|
||||
{
|
||||
"pnpm": {
|
||||
"peerDependencyRules": {
|
||||
"allowedVersions": {
|
||||
"webpack": "4 || 5",
|
||||
"postcss": "7 || 8"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Debugging Peer Dependencies
|
||||
|
||||
```bash
|
||||
# See why a package is installed
|
||||
pnpm why <package>
|
||||
|
||||
# List all peer dependency warnings
|
||||
pnpm install --reporter=append-only 2>&1 | grep -i peer
|
||||
|
||||
# Check dependency tree
|
||||
pnpm list --depth=Infinity
|
||||
```
|
||||
|
||||
## Best Practices
|
||||
|
||||
1. **Enable auto-install-peers** for convenience (default in pnpm v8+)
|
||||
|
||||
2. **Use peerDependencyRules** instead of ignoring all warnings
|
||||
|
||||
3. **Document suppressed warnings** explaining why they're safe
|
||||
|
||||
4. **Keep peer deps ranges wide** in libraries:
|
||||
```json
|
||||
{
|
||||
"peerDependencies": {
|
||||
"react": "^17.0.0 || ^18.0.0"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
5. **Test with different peer versions** if you support multiple majors
|
||||
|
||||
<!--
|
||||
Source references:
|
||||
- https://pnpm.io/package_json#pnpmpeerdependencyrules
|
||||
- https://pnpm.io/npmrc#auto-install-peers
|
||||
-->
|
||||
Reference in New Issue
Block a user