Token导航 LogoToken导航TokenDH.com
研究检索执行命令github未标认证来源可访问clear审计提醒

rhdh-frontend-dynamic-plugin-bootstraprhdh 前端动态插件 bootstrap

Agent Skill

用于辅助前端页面、组件、样式和交互逻辑的开发与维护。它适合让 Agent 生成或审查 React、Next.js、Vue、Tailwind、CSS 等相关代码,整理组件结构,或定位布局和性能问题。使用时需要结合项目现有设计系统、路由和构建方式,避免只生成孤立片段;涉及页面改动时,应配合本地预览和构建检查确认视觉效果。

总安装

24

周安装

1

GitHub Stars

公开资料未说明

下载量

8
CodexClaudeCursorGemini CLI

安装说明

本站只整理中文说明和来源信息,不托管安装包,也不代用户安装。

GitHub

来源数

3

许可证

MIT

最后核验

2026-05-01

来源状态

来源可访问

安装方式

通过对话安装

复制提示词发给支持本地命令或 Skills 的 AI 助手,先确认命令和权限,再让它执行。

请帮我安装这个 Agent Skill:rhdh-frontend-dynamic-plugin-bootstrap(rhdh 前端动态插件 bootstrap)
来源仓库:https://github.com/kadel/claude-plugins
仓库路径:skills/rhdh-frontend-dynamic-plugin-bootstrap
安装命令:
npx skills add https://github.com/kadel/claude-plugins --skill rhdh-frontend-dynamic-plugin-bootstrap
安装前请先检查当前环境是否支持对应 CLI,并向我确认将要执行的命令、安装目录、联网范围和文件读写权限;确认后再执行。

命令行安装

复制命令到本机终端执行。不同来源提供的安装方式可能略有差异;本站展示可直接复制的安装命令,安装前请核对来源页面。

skills.shnpx skills
npx skills add https://github.com/kadel/claude-plugins --skill rhdh-frontend-dynamic-plugin-bootstrap

简介

rhdh-frontend-dynamic-plugin-bootstrap 用于辅助前端页面、组件和样式开发,帮助生成或审查 React、Vue 等相关代码。

  • 适用于前端项目的设计系统整合和布局性能优化场景。
  • 可通过 npx 命令从 claude-plugins 仓库安装,建议查看原始 README 了解具体用法。
  • 使用时需结合项目现有路由和构建方式,避免生成孤立片段,涉及页面改动时应配合本地预览。
  • 输出内容应以项目实际需求为基础,不擅自修改核心架构或依赖关系。

SKILL.md

Purpose

Bootstrap a new frontend dynamic plugin for Red Hat Developer Hub (RHDH). Frontend dynamic plugins provide UI components, pages, entity cards, themes, and visual customizations that integrate with the RHDH application shell.

Note: This skill covers frontend plugins only. Backend dynamic plugins (APIs, scaffolder actions, processors) are covered in a separate skill.

When to Use

Use this skill when creating a new frontend plugin intended for RHDH dynamic plugin deployment. This includes:

  • New pages and routes
  • Entity page cards and tabs
  • Sidebar menu items
  • Custom themes
  • Scaffolder field extensions
  • TechDocs addons
  • Search result types and filters
  • Any UI component for RHDH

Do NOT use this skill for:

  • Backend API plugins
  • Scaffolder actions (server-side)
  • Catalog processors or providers
  • Authentication modules

Prerequisites

Before starting, ensure the following are available:

  • Node.js 22+ and Yarn
  • Container runtime (podman or docker)
  • Access to a container registry (e.g., quay.io) for publishing

Workflow Overview

  1. Determine RHDH Version - Identify target RHDH version for compatibility
  2. Create Backstage App - Scaffold Backstage app with matching version
  3. Create Frontend Plugin - Generate new frontend plugin using Backstage CLI
  4. Implement Plugin Components - Build React components and exports
  5. Configure Scalprum - Set up module federation for dynamic loading
  6. Export as Dynamic Plugin - Build and export using RHDH CLI
  7. Package as OCI Image - Create container image for deployment
  8. Configure Plugin Wiring - Define routes, mount points, and menu items

Step 1: Determine RHDH Version

Check the target RHDH version and find the compatible Backstage version. Consult references/versions.md (in the backend skill) for the version compatibility matrix.

RHDH VersionBackstage Versioncreate-app Version
1.8 / next1.42.50.7.3
1.71.39.10.6.2
1.61.36.10.5.25

Ask the user which RHDH version they are targeting if not specified.

Step 2: Create Backstage Application

# For RHDH 1.7 (adjust version as needed)
npx @backstage/create-app@0.6.2

cd <app-name>
yarn install

(you can create backstage app in the current directory by specifying --path.)

Step 3: Decide if you want to use RHDH themes.

If you want to use RHDH themes, follow the steps below. If you don't want to use RHDH themes, skip to Step 4.

Add RHDH theme to Backstage app dependencies:

yarn workspace app add @red-hat-developer-hub/backstage-plugin-theme

Update packages/app/src/App.tsx and apply the themes to createApp:

import { getThemes } from '@red-hat-developer-hub/backstage-plugin-theme';

// ...

const app = createApp({
  apis,
  // ...
  themes: getThemes(),
});

Step 3: Create Frontend Plugin

Generate a new frontend plugin:

yarn new --select frontend-plugin --option id=<plugin-id>

The plugin will be created at plugins/<plugin-id>/

Generated structure:

plugins/<plugin-id>/
├── src/
│   ├── index.ts              # Public exports
│   ├── plugin.ts             # Plugin definition
│   ├── routes.ts             # Route references
│   └── components/
│       └── ExampleComponent/
├── package.json
└── dev/
    └── index.tsx             # Development harness

Step 4: If you decided to use RHDH themes, add RHDH Theme to Development Harness

By default, yarn start uses standard Backstage themes. To preview your plugin with RHDH styling during local development, configure the RHDH theme package.

Install Theme Package

cd plugins/<plugin-id>
yarn add @red-hat-developer-hub/backstage-plugin-theme

Configure Development Harness

Update dev/index.tsx to use RHDH themes:

import { getAllThemes } from '@red-hat-developer-hub/backstage-plugin-theme';
import { createDevApp } from '@backstage/dev-utils';
import { myPlugin, MyPage } from '../src';

createDevApp()
  .registerPlugin(myPlugin)
  .addPage({
    element: <MyPage />,
    title: 'My Plugin',
    path: '/my-plugin',
  })
  .addThemes(getAllThemes())
  .render();

Available Theme APIs

  • getThemes() / useThemes() - Latest RHDH light and dark themes
  • getAllThemes() / useAllThemes() - All themes including legacy versions
  • useLoaderTheme() - Returns Material-UI v5 theme object
Note: When deployed to RHDH, the application shell provides theming automatically. This configuration is only needed for local development.

Step 5: Implement Plugin Components

Page Component

Create a full-page component for dynamic routes:

// src/components/MyPage/MyPage.tsx
import React from 'react';
import { Page, Header, Content } from '@backstage/core-components';

export const MyPage = () => (
  <Page themeId="tool">
    <Header title="My Plugin" />
    <Content>
      <h1>Hello from My Plugin</h1>
    </Content>
  </Page>
);

Entity Card Component

Create a card for entity pages:

// src/components/MyCard/MyCard.tsx
import React from 'react';
import { InfoCard } from '@backstage/core-components';
import { useEntity } from '@backstage/plugin-catalog-react';

export const MyEntityCard = () => {
  const { entity } = useEntity();
  return (
    <InfoCard title="My Plugin Info">
      <p>Entity: {entity.metadata.name}</p>
    </InfoCard>
  );
};

Export Components

Export all components in src/index.ts:

// src/index.ts
export { myPlugin } from './plugin';
export { MyPage } from './components/MyPage';
export { MyEntityCard } from './components/MyCard';

Build and verify:

cd plugins/<plugin-id>
yarn build

Step 6: Export as Dynamic Plugin

cd plugins/<plugin-id>
npx @red-hat-developer-hub/cli@latest plugin export

Output shows the generated Scalprum configuration:

No scalprum config. Using default dynamic UI configuration:
{
  "name": "my-org.plugin-my-plugin",
  "exposedModules": {
    "PluginRoot": "./src/index.ts"
  }
}

The dist-dynamic/ directory contains:

  • dist-scalprum/ - Webpack federated modules
  • package.json - Modified for dynamic loading

Step 7: Package as OCI Image

npx @red-hat-developer-hub/cli@latest plugin package \
  --tag quay.io/<namespace>/<plugin-name>:v0.1.0

podman push quay.io/<namespace>/<plugin-name>:v0.1.0

Step 8: Configure Plugin Wiring

Frontend plugins require configuration in dynamic-plugins.yaml to define how they integrate with RHDH. This is the critical step that differentiates frontend from backend plugins.

Basic Structure

plugins:
  - package: oci://quay.io/<namespace>/<plugin-name>:v0.1.0!my-plugin
    disabled: false
    pluginConfig:
      dynamicPlugins:
        frontend:
          my-org.plugin-my-plugin:  # Must match scalprum.name
            dynamicRoutes: []       # Full page routes
            mountPoints: []         # Entity page integrations
            menuItems: {}           # Sidebar configuration
            appIcons: []            # Custom icons
            routeBindings: {}       # External route bindings

Dynamic Routes (Full Pages)

Add a new page with sidebar menu:

dynamicRoutes:
  - path: /my-plugin
    importName: MyPage
    menuItem:
      icon: dashboard
      text: My Plugin

Mount Points (Entity Cards)

Add a card to entity overview:

mountPoints:
  - mountPoint: entity.page.overview/cards
    importName: MyEntityCard
    config:
      layout:
        gridColumn: '1 / -1'
      if:
        allOf:
          - isKind: component

Menu Items (Sidebar)

Configure sidebar ordering and nesting:

menuItems:
  my-plugin:
    priority: 10
    parent: tools
  tools:
    icon: build
    title: Tools
    priority: 50

See references/frontend-wiring.md for complete wiring options.

Common Wiring Patterns

Entity Tab with Cards

entityTabs:
  - path: /my-tab
    title: My Tab
    mountPoint: entity.page.my-tab

mountPoints:
  - mountPoint: entity.page.my-tab/cards
    importName: MyTabContent

Conditional Rendering

mountPoints:
  - mountPoint: entity.page.overview/cards
    importName: MyCard
    config:
      if:
        anyOf:
          - hasAnnotation: my-plugin/enabled
          - isType: service

Custom Icons

appIcons:
  - name: myCustomIcon
    importName: MyCustomIcon

dynamicRoutes:
  - path: /my-plugin
    importName: MyPage
    menuItem:
      icon: myCustomIcon
      text: My Plugin

Known Issues

MUI v5 Styles Missing

If using MUI v5, add class name generator to src/index.ts:

import { unstable_ClassNameGenerator as ClassNameGenerator } from '@mui/material/className';

ClassNameGenerator.configure(componentName =>
  componentName.startsWith('v5-') ? componentName : `v5-${componentName}`
);

export * from './plugin';

Grid Spacing Missing

Apply spacing manually to MUI v5 Grid:

<Grid container spacing={2}>
  <Grid item>...</Grid>
</Grid>

Debugging

Frontend plugins can be debugged in browser DevTools:

  1. Open Developer Tools (F12)
  2. Go to Sources tab
  3. Find plugin source files (source maps included)
  4. Set breakpoints

Additional Resources

Reference Files

  • references/frontend-wiring.md - Complete mount points, routes, bindings
  • references/entity-page.md - Entity page customization

Example Files

  • examples/frontend-plugin-config.yaml - Complete frontend wiring example

External Resources

适合场景

01

用户想查找某类 Agent Skill 时

02

需要根据任务场景推荐可安装能力包时

03

需要对比不同来源的安装命令和来源信息时

04

需要参考平台分布和安装热度时

能力概览

能力 1

按任务关键词查找相关 Skills

能力 2

展示可复制的安装命令

能力 3

保留来源站点、仓库和原始说明,方便继续核验

能力 4

补充不同宿主或平台的使用分布数据

能力 5

展示第三方安全扫描或审计结果

安装后应在对应宿主中按原始 README 的触发条件使用;具体调用方式请以来源页面和 README 为准。

平台分布

Claude Code

26.3%
按下载量换算2

windsurf

21.9%
按下载量换算2

trae

17.08%
按下载量换算1

OpenCode

12.22%
按下载量换算1

Codex

8.3%
按下载量换算1

Antigravity

3.61%
按下载量换算0

安全审计

Gen Agent Trust Hub

通过

Socket

通过

Snyk

可疑

权限和风险

执行命令

安装流程涉及命令执行,可能通过 npx skills add https://github.com/kadel/claude-plugins --skill rhdh-frontend-dynamic-plugin-bootstrap;npx skills add kadel/claude-plugins --skill "rhdh-frontend-dynamic-plugin-bootstrap" 联网下载 Skill 或依赖。用户安装前应确认命令来源、仓库内容和执行环境。

安装前确认

本站仅展示第三方公开信息,不托管安装包,不提供自动安装或运行环境。安装前应自行审查源码、依赖和命令行为。来源安全扫描存在 warning/failed 结果,不能写成本站确认安全。

来源信息

继续浏览同类 Skills