Slash Command47 repo starsupdated 1mo ago
setup-pm
配置项目首选包管理器 (npm/pnpm/yarn/bun)
Install in Claude Code
Copymkdir -p ~/.claude/commands && curl -fsSL https://raw.githubusercontent.com/xiaobei930/cc-best/HEAD/commands/setup-pm.md -o ~/.claude/commands/setup-pm.mdThen start a new Claude Code session; the slash command loads automatically.
Definition
setup-pm.md
# /setup-pm - 包管理器配置
配置项目或全局的首选包管理器。
## 快速使用
```bash
# 检测当前配置
node scripts/node/setup-package-manager.js --detect
# 设置项目首选为 pnpm
node scripts/node/setup-package-manager.js --project pnpm
# 设置全局首选为 bun
node scripts/node/setup-package-manager.js --global bun
# 列出所有可用选项
node scripts/node/setup-package-manager.js --list
```
## 检测优先级
系统按以下顺序检测包管理器:
| 优先级 | 来源 | 说明 |
| ------ | ----------------------------------------- | ----------------------- |
| 1 | 环境变量 `CLAUDE_PACKAGE_MANAGER` | 最高优先级 |
| 2 | 项目配置 `.claude/package-manager.json` | 项目级覆盖 |
| 3 | `package.json` 的 `packageManager` | 标准字段 |
| 4 | Lock 文件检测 | 自动检测 |
| 5 | 全局配置 `~/.claude/package-manager.json` | 用户默认 |
| 6 | 回退 | pnpm > bun > yarn > npm |
## 配置文件格式
### 项目配置 (.claude/package-manager.json)
```json
{
"packageManager": "pnpm",
"updatedAt": "2024-01-23T10:00:00.000Z"
}
```
### 全局配置 (~/.claude/package-manager.json)
```json
{
"packageManager": "bun",
"updatedAt": "2024-01-23T10:00:00.000Z"
}
```
### package.json 标准字段
```json
{
"name": "my-project",
"packageManager": "pnpm@8.15.0"
}
```
## 环境变量
设置 `CLAUDE_PACKAGE_MANAGER` 环境变量可覆盖所有配置:
```bash
# Windows PowerShell
$env:CLAUDE_PACKAGE_MANAGER = "pnpm"
# macOS/Linux
export CLAUDE_PACKAGE_MANAGER=pnpm
```
## 支持的包管理器
| 包管理器 | Lock 文件 | 特点 |
| -------- | ----------------- | ------------------ |
| **npm** | package-lock.json | Node.js 自带 |
| **pnpm** | pnpm-lock.yaml | 快速、节省磁盘空间 |
| **yarn** | yarn.lock | 稳定、广泛使用 |
| **bun** | bun.lockb | 极快、新一代运行时 |
## 在 Hooks 中使用
Node.js hooks 会自动使用检测到的包管理器:
```javascript
const { detect, getRunCommand } = require("./lib/package-manager");
const pm = detect();
console.log(`使用 ${pm.name} (来源: ${pm.source})`);
// 获取运行命令
const devCmd = getRunCommand("dev"); // -> "pnpm dev" 或 "npm run dev"
const testCmd = getRunCommand("test"); // -> "pnpm test" 或 "npm test"
```
> **记住**: 包管理器配置一次到位,后续每个需求都能受益。模板和规范是效率的基础设施。