Claude Code: 插件系统

最后更新:2026-08-31

插件让 Claude Code 的能力可插拔扩展——安装一个插件,就多一种能力,不需要改核心代码。

💡 提示:Claude Code 的插件和 MCP 是两种不同的扩展方式。插件修改 Claude Code 本身的行为,MCP 扩展它连接外部世界的能力。

📋 前置知识:第十三章 子代理

1. 你将学到


2. 插件系统架构

(1) 插件类型

类型 作用 示例
工具插件 添加新工具/命令 代码分析工具
钩子插件 在特定事件触发自定义行为 提交前自动 lint
主题插件 改变输出样式 彩色 diff 显示
集成插件 连接第三方服务 Jira 集成

(2) 插件生命周期

100%
graph LR
    A[发现插件] --> B[安装插件]
    B --> C[加载配置]
    C --> D[注册工具/钩子]
    D --> E[运行时调用]
    E --> F[卸载/禁用]

(3) 插件与 MCP 对比

维度 插件 MCP
扩展方向 修改 Claude Code 行为 连接外部服务
运行位置 Claude Code 进程内 独立进程
通信方式 直接函数调用 协议通信
适用场景 添加命令、改变输出 数据库、API、浏览器
开发难度 中 低

3. 官方与社区插件

(1) 官方插件

插件 功能 安装
claude-plugin-lint 自动 lint 修改的文件 claude plugin add lint
claude-plugin-test 修改后自动运行测试 claude plugin add test
claude-plugin-git 增强集成 git 操作 claude plugin add git
claude-plugin-doc 自动生成文档 claude plugin add doc

(2) 社区插件

插件 功能 来源
claude-plugin-jira Jira Issue 集成 GitHub
claude-plugin-slack Slack 通知 GitHub
claude-plugin-docker Docker 操作增强 GitHub
claude-plugin-terraform IaC 代码审查 GitHub

▶ 示例 1: 插件安装与管理

BASH
# 查看已安装插件
claude plugin list

# 安装官方插件
claude plugin add lint

# 安装社区插件(从 npm)
claude plugin add @community/claude-plugin-jira

# 安装本地插件
claude plugin add ./my-custom-plugin

# 禁用插件(不卸载)
claude plugin disable lint

# 卸载插件
claude plugin remove lint

# 更新插件
claude plugin update

4. 插件配置

(1) 全局配置

JSON
// ~/.claude/plugins.json
{
  "plugins": [
    {
      "name": "lint",
      "enabled": true,
      "config": {
        "runOnSave": true,
        "fix": true
      }
    },
    {
      "name": "test",
      "enabled": true,
      "config": {
        "watchMode": false,
        "coverage": true
      }
    }
  ]
}

(2) 项目级配置

JSON
// .claude/plugins.json
{
  "plugins": [
    {
      "name": "lint",
      "config": {
        "command": "npm run lint:fix",
        "files": ["src/**/*.ts"]
      }
    }
  ]
}

▶ 示例 2: Lint 插件工作流

TEXT 📖 仅展示
# 安装 lint 插件后

> 重构 src/utils/string.ts 中的 slugify 函数

Claude Code:
  → Reading src/utils/string.ts
  → Modifying slugify function...
  → [lint plugin] Running: npm run lint -- --fix
  → [lint plugin] Found 1 issue: missing return type
  → Auto-fixing: adding string return type
  → [lint plugin] All clean ✓
  → Running: npm test -- string.test.ts
  ✅ All tests passed

5. 插件开发入门

(1) 插件结构

TEXT 📖 仅展示
my-plugin/
├── package.json
├── index.ts
├── README.md
└── config.schema.json

▶ 示例 3: 创建简单插件

TYPESCRIPT
// my-plugin/index.ts
interface ClaudePlugin {
  name: string;
  version: string;
  tools?: ToolDefinition[];
  hooks?: HookDefinition[];
}

export default {
  name: "my-custom-linter",
  version: "1.0.0",

  hooks: {
    "after:file:write": async (context) => {
      const { filePath, content } = context;
      if (filePath.endsWith(".ts")) {
        const { execSync } = require("child_process");
        try {
          execSync(`npx eslint --fix ${filePath}`, { stdio: "pipe" });
          console.log(`[my-linter] Fixed ${filePath}`);
        } catch (e) {
          console.log(`[my-linter] Issues in ${filePath}`);
        }
      }
    },
  },

  tools: [
    {
      name: "count_lines",
      description: "Count lines of code in a file",
      parameters: {
        file: { type: "string", description: "File path" },
      },
      execute: async ({ file }) => {
        const fs = require("fs");
        const content = fs.readFileSync(file, "utf-8");
        return { lines: content.split("\n").length };
      },
    },
  ],
} as ClaudePlugin;

6. 插件最佳实践

(1) 选择插件的原则

原则 说明
最小化 只安装必要的插件
验证来源 优先官方,社区需审查
测试先行 新插件先在测试项目验证
定期清理 删除不用的插件

(2) 插件冲突处理

TEXT 📖 仅展示
# 多个插件可能产生冲突

lint 插件: 保存后运行 eslint --fix
format 插件: 保存后运行 prettier --write

# 解决:在配置中指定执行顺序
{
  "plugins": [
    { "name": "format", "order": 1 },
    { "name": "lint", "order": 2 }
  ]
}

❓ 常见问题

Q 插件和 MCP 到底用哪个?
A 连接外部服务用 MCP(数据库、GitHub),修改 Claude Code 行为用插件(自动 lint、自定义命令)。两者可以同时使用。
Q 安装太多插件会拖慢 Claude Code 吗?
A 会。每个插件占用加载时间和内存。建议只安装必要的,定期清理。
Q 插件会影响 API 费用吗?
A 间接影响。某些插件可能增加上下文大小或触发额外 API 调用。但通常影响很小。
Q 社区插件安全吗?
A 不保证。安装前检查源码和作者信誉。优先使用有较多 star 和活跃维护的插件。
Q 能同时安装多个同类插件吗?
A 可以但可能冲突。两个 lint 插件可能对同一文件执行不同规则。建议同类插件只保留一个。
Q 插件开发难吗?
A 简单插件只需几十行代码。遵循插件接口规范,定义工具或钩子即可。复杂插件需要深入理解 Claude Code 的内部事件系统。

📖 小节


📝 作业

  1. 基础题(难度⭐):安装官方 lint 插件,验证修改文件后自动 lint 功能。
  2. 进阶题(难度⭐⭐):安装并配置两个插件,确保它们不冲突。
  3. 挑战题(难度⭐⭐⭐):开发一个自定义插件,在每次文件修改后自动运行格式化和 lint。
Web-Tutorial.com

Web-Tutorial 技术团队

由多位开发者共同维护的编程教程平台。每篇教程由对应领域的开发者编写和审核,确保内容准确可靠。如发现任何问题,欢迎向我们反馈。

100%

🙏 帮我们做得更好

我们是刚上线的编程教程站,几个人的小团队,精力有限。页面虽经检查,难免还有疏漏——链接失效、排版错乱、内容有误、语言生硬……

如果您发现了,麻烦告诉我们,我们会在收到反馈后第一时间进行修复,再次感谢您的光临 🙏