Files
jackwener__opencli/docs/zh/guide/plugins.md
2026-03-22 18:40:32 +08:00

2.5 KiB
Raw Permalink Blame History

插件

OpenCLI 支持社区贡献的 plugins。你可以从 GitHub 安装第三方 adapters,它们会和内置 commands 一起在启动时自动发现。

安装插件

# 安装插件
opencli plugin install github:ByteYue/opencli-plugin-github-trending

# 列出已安装插件
opencli plugin list

# 使用插件(本质上就是普通 command)
opencli github-trending today

# 卸载插件
opencli plugin uninstall github-trending

插件目录结构

Plugins 存放在 ~/.opencli/plugins/<name>/。每个子目录都会在启动时扫描 .yaml、.ts、.js 命令文件,格式与内置 adapters 相同。

安装来源

opencli plugin install github:user/repo
opencli plugin install https://github.com/user/repo

如果仓库名带 opencli-plugin- 前缀,本地目录会自动去掉这个前缀。例如 opencli-plugin-hot-digest 会变成 hot-digest。

YAML plugin 示例

my-plugin/
  hot.yaml
site: my-plugin
name: hot
description: Example plugin command
strategy: public
browser: false

pipeline:
  - evaluate: |
      () => [{ title: 'hello', url: 'https://example.com' }]

columns: [title, url]

TypeScript plugin 示例

my-plugin/
  index.ts
  package.json
{
  "name": "opencli-plugin-my-plugin",
  "type": "module"
}
import { cli, Strategy } from '@jackwener/opencli/registry';

cli({
  site: 'my-plugin',
  name: 'hot',
  description: 'Example TS plugin command',
  strategy: Strategy.PUBLIC,
  browser: false,
  columns: ['title', 'url'],
  func: async () => [{ title: 'hello', url: 'https://example.com' }],
});

运行 opencli plugin install 时,TS plugins 会自动完成基础设置:

  1. 安装 plugin 自身依赖
  2. 补齐 TypeScript 运行环境
  3. 将宿主 @jackwener/opencli 链接到 plugin 的 node_modules/,保证 @jackwener/opencli/registry 指向当前宿主版本

示例 plugins

  • opencli-plugin-github-trending:GitHub Trending 仓库
  • opencli-plugin-hot-digest:多平台热点聚合(zhihu、weibo、bilibili、v2ex、stackoverflow、reddit、linux-do)
  • opencli-plugin-juejin:稀土掘金热榜、分类和文章流

排查问题

TS plugin import 报错

如果看到 Cannot find module '@jackwener/opencli/registry',通常是宿主 symlink 失效。重新安装 plugin 即可:

opencli plugin uninstall my-plugin
opencli plugin install github:user/opencli-plugin-my-plugin

安装或卸载 plugin 后,建议重新打开一个终端,确保启动时重新发现命令。