@trops/dash-core

中文文档
0.1.895发布于 2026/11/03MITESM + CJS构建来源已验证

Dash仪表板应用程序的核心框架

中文使用文档
文档目录24 节
  1. 安装
  2. 两种导出路径
  3. 渲染器(反应)
  4. 电子(主工序)
  5. 体系结构
  6. 渲染层( src/ )
  7. 电子层( electron/ )
  8. 目录结构
  9. 关键模式
  10. createMainApi工厂
  11. 供应商系统
  12. 文本导入规则
  13. MCP提供商生命周期
  14. ComponentManager
  15. 小部件包加载
  16. 布局系统
  17. 关键文件
  18. 文档
  19. 相关的包
  20. 开发
  21. 构建输出验证
  22. 汇总配置
  23. 故障排除
  24. 许可证

@trops / dash-core

Dash仪表板应用程序的核心框架。提供所有Dash应用程序使用的小部件系统、提供者体系结构、上下文提供者、布局引擎和Electron主进程层。

安装

npm install @trops/dash-core

同行依赖性:

{
  "@trops/dash-react": ">=0.1.187",
  "react": "^18.2.0",
  "react-dom": "^18.2.0"
}

两种导出路径

渲染器(反应)

与平台无关的UI框架——上下文、钩子、模型、组件、小部件系统。

import {
  ComponentManager,
  DashboardPublisher,
  ErrorBoundary,
  // Contexts
  AppContext,
  DashboardContext,
  ThemeWrapper,
  ProviderContext,
  // Hooks
  useDashboard,
  useMcpProvider,
  useWidgetProviders,
  useInstalledWidgets,
  // Models
  DashboardModel,
  LayoutModel,
  ThemeModel,
  // Components
  LayoutBuilder,
  SettingsPanel,
  NavigationBar,
  // Widget
  Widget,
  WidgetFactory,
  ExternalWidget,
} from "@trops/dash-core";

电子(主工序)

电子应用程序的控制器、IPC处理程序、事件和小部件管道。

const {
  // Factory
  createMainApi,
  // Controllers
  providerController,
  mcpController,
  workspaceController,
  themeController,
  registryController,
  // Widget pipeline
  widgetRegistry,
  widgetCompiler,
  dynamicWidgetLoader,
  // Events
  events,
} = require("@trops/dash-core/electron");

体系结构

@trops/dash-core
├── src/                    Renderer layer (ESM + CJS)
│   ├── Api/                IPC API clients
│   ├── Components/         Dashboard, Layout, Settings, Navigation, etc.
│   ├── Context/            React Context providers
│   ├── Models/             Data models (Dashboard, Layout, Theme, etc.)
│   ├── Widget/             Widget, WidgetFactory, ExternalWidget
│   ├── hooks/              useDashboard, useMcpProvider, useWidgetProviders
│   └── utils/              Bundle loader, layout helpers, validation
│
└── electron/               Electron layer (CJS only)
    ├── api/                IPC handlers + createMainApi factory
    ├── controller/         Business logic (providers, MCP, themes, etc.)
    ├── events/             Event definitions
    ├── mcp/                MCP server catalog
    └── utils/              File, color, browser utilities

渲染层(src/)

与平台无关的UI框架。

模块关键文件目的
ComponentManagerComponentManager.js小部件/工作区注册,配置解析
上下文Context/AppContext, DashboardContext, ThemeWrapper, ProviderContext, WidgetContext, WorkspaceContext
钩子hooks/useDashboard, useMcpProvider, useWidgetProviders, useInstalledWidgets, useWidgetEvents, userregistrysearch
模型Models/DashboardModel、LayoutModel、ThemeModel、ComponentConfigModel、SettingsModel等。
ApiApi/DashboardApi, ElectronDashboardApi (typed), WidgetApi, ThemeApi, MockDashboardApi
组件Components/仪表板,布局,设置,导航,主题,提供程序,菜单,工作空间
小部件Widget/Widget, WidgetFactory, ExternalWidget
跑龙套utils/widgetBundleLoader, layout, validation, mcpUtils, dragTypes, resolveIcon, themeGenerator, DynamicWidgetLoader, widgeregistry, plugin-loader

电子层(electron/)

主流程控制器、api和小部件管道。

模块关键文件目的
控制器controller/providerController, mcpController, workspaceController, themeController, settingsController, layoutController, dataController, registryController, secureStoreController, dialogController, algolicontroller, openaiController, menuItemsController, pluginController
apiapi/每个控制器的IPC处理程序+ mainApi.js (createMainApi工厂)
事件events/每个模块的事件通道定义
小部件管道widgetRegistry.js, widgetCompiler.js, dynamicWidgetLoader.js安装、编译(esbuild)和加载外部小部件
MCPmcp/mcpServerCatalog.jsonMCP服务器定义(传输、命令、参数、环境映射)

目录结构

dash-core/
├── src/                            # Renderer layer
│   ├── Api/
│   ├── ComponentManager.js
│   ├── Components/
│   │   ├── Dashboard/
│   │   ├── Layout/                  # LayoutBuilder, LayoutContainer, LayoutGridContainer
│   │   ├── Navigation/
│   │   ├── Settings/
│   │   ├── Theme/
│   │   ├── Provider/
│   │   ├── Menu/
│   │   └── Workspace/
│   ├── Context/
│   ├── DashboardPublisher.js
│   ├── ErrorBoundary.js
│   ├── Models/
│   ├── Widget/
│   ├── hooks/
│   └── utils/
├── electron/                        # Electron layer
│   ├── api/
│   │   └── mainApi.js               # createMainApi factory
│   ├── controller/
│   ├── events/
│   ├── mcp/
│   │   └── mcpServerCatalog.json
│   ├── utils/
│   ├── widgetRegistry.js
│   ├── widgetCompiler.js
│   └── dynamicWidgetLoader.js
├── dist/                            # Build output — never edit manually
│   ├── index.js                     # Renderer CJS
│   ├── index.esm.js                 # Renderer ESM
│   └── electron/
│       └── index.js                 # Electron CJS
├── docs/                            # Documentation
│   ├── requirements/                # PRDs and feature specs
│   │   └── prd/                     # Product Requirements Documents
│   └── *.md                         # Technical docs
├── .github/workflows/
│   └── release-package.yml          # Auto-publish on push to master
├── package.json
├── rollup.config.renderer.mjs
├── rollup.config.electron.mjs
├── babel.config.json
└── tsconfig.json

关键模式

createMainApi工厂

模板应用使用 createMainApi(extensions) 将核心api与自定义api结合起来:

const { createMainApi } = require("@trops/dash-core/electron");

const api = createMainApi({
  myCustomApi: require("./myCustomApi"),
});

供应商系统

从 AppContext.providers, 不 DashboardContext.providers。这是由于组件树排序——DashboardWrapper在提供商加载之前呈现。

文本导入规则

总进口 ThemeContext 从 @trops/dash-react 为了避免双重上下文实例:

// CORRECT
import { ThemeContext } from "@trops/dash-react";

// WRONG — creates separate context
import { ThemeContext } from "./Context/ThemeContext";

MCP提供商生命周期

  1. 小部件安装-> useMcpProvider("slack") 钩运行
  2. 钩子从 AppContext.providers (与 mcpConfig 和凭证)
  3. 调用 dashApi.mcpStartServer() —> ipc—> mcpController 生成工作室子进程
  4. 服务器返回可用的工具->钩子过滤器 allowedTools 如果指定了
  5. 小部件调用 callTool("send_message", args) ->每次呼叫超时30秒
  6. 卸载时,钩子调用 mcpStopServer() 清理子进程

ComponentManager

  • registerContainerTypes(LayoutContainer, LayoutGridContainer) ——auto-called on import
  • registerWidget(config, name) / config(name) 用于部件CRUD
  • _sourcePackage 在外部小部件配置上设置的字段 registerBundleConfigs
  • loadWidgetComponents 来丰富注册表项 .dash.js 元数据

小部件包加载

  • widgetBundleLoader.js 来计算CJS包 new Function() +需要垫片
  • 关键: MODULE_MAP必须包含 @trops/dash-core 所以外部小部件共享ComponentManager单例
  • extractWidgetConfigs 需要 typeof entry.component === "function"

布局系统

  • 网格路径vs非网格路径:网格单元使用 layout.find() 它返回未经LayoutModel处理的原始项。
  • LayoutModel:刷新 eventHandlers/events 从 ComponentManager.config() ——在编辑模式中保持配置字段最新的关键。

关键文件

文件目的
src/index.js主渲染器导出+自动注册
electron/index.js主电子输出
electron/api/mainApi.jscreateMainApi(extensions) 工厂
src/ComponentManager.js挂件注册系统
src/Context/ThemeWrapper.js主题提供程序(从@trops/dash-react导入ThemeContext)
src/Context/DashboardWrapper.js仪表板上下文+提供程序传递
src/hooks/useMcpProvider.jsMCP服务器连接和工具调用
src/hooks/useWidgetProviders.js小部件提供程序解析
src/hooks/useInstalledWidgets.js合并内置和安装的小部件
src/utils/widgetBundleLoader.js渲染器中的CJS包计算
src/Models/LayoutModel.js布局处理,从ComponentManager中刷新事件
src/Models/ComponentConfigModel.js使用默认值规范小部件配置
electron/controller/providerController.js提供者CRUD +加密
electron/controller/mcpController.jsMCP服务器spawn/stop/call
electron/widgetRegistry.js小部件安装/卸载持久性
electron/widgetCompiler.jsEsbuild编译管道
electron/mcp/mcpServerCatalog.jsonMCP服务器定义

文档

看到 文档/ INDEX.md 完整的文档索引:

包目的位置
@trops/dash-reactUI组件库dash-react
dash-electron电子应用模板dash-electron

开发

# Build both layers
npm run build

# Build renderer only
npm run build:renderer

# Build electron only
npm run build:electron

# Format code
npm run prettify

发布是通过GitHub动作自动推送到 master.

构建输出验证

在任何构建之后,始终验证所有三个输出文件都存在:

ls dist/index.js dist/index.esm.js dist/electron/index.js

退出0但产生不完整输出的构建是无声失败。

汇总配置

渲染器 (rollup.config.renderer.mjs):

  • 输入: src/index.js
  • 输出:CJS (dist/index.js+ esm (dist/index.esm.js)
  • 外部:react, react-dom, @trops/dash-react, @ fortawsome /*, @babel/runtime

电子 (rollup.config.electron.mjs):

  • 输入: electron/index.js
  • 输出:仅CJS (dist/electron/index.js)
  • 外部:electron, Node builgins, esbuild, @ anthropicai /sdk, @modelcontextprotocol/sdk, algoliassearch, openai等。

故障排除

构建退出0,但dist文件丢失: 无声的累积失败——检查未解析的导入或循环依赖项。

dist/electron/index.js 构建后缺失: 电子卷积配置可能悄无声息地失败。运行 npm run build:electron 孤独就是孤立。

消费者应用程序在修改后崩溃: 修复dash-core的根本原因,不要修改dash-electron作为变通办法。

消费者中的econtext没有更新: 验证econtext是否从 @trops/dash-react 无处不在。

MCP工具没有出现在小部件中: 检查 AppContext.providers (不 DashboardContext.providers)是来源。

许可证

麻省理工学院

版本与发布记录

@trops/dash-core 共发布 851 个版本,首次发布于 2026/02/25;过去 12 个月发布了 851 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
0.1.895latest2026/11/03今天
0.1.8942026/11/02今天
0.1.8932026/11/021 天前
0.1.8912026/11/021 天前
0.1.8922026/11/021 天前
0.1.8902026/11/012 天前

关于 @trops/dash-core 的常见问题

@trops/dash-core 是什么?

Dash仪表板应用程序的核心框架

如何安装 @trops/dash-core?

在项目目录运行 npm install @trops/dash-core,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:react(^18.2.0)、react-dnd(^16.0.1)、react-dom(^18.2.0)、prop-types(^15.8.1)、tailwindcss(^3.2.7)、@heroicons/react(^2.0.16)、react-router-dom(^6.3.0)、@headlessui/react(1.4)、@trops/dash-react(>=1.0.83)、react-dnd-html5-backend(^16.0.1)、react-instantsearch-hooks-web(^6.26.0)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。它还提供命令行工具 dash-scan-manifest,可以用 npx dash-scan-manifest 直接运行。

@trops/dash-core 支持 TypeScript 吗?

该包的 package.json 没有声明类型入口。需要类型提示时,可以在 npm 上查找社区维护的 @types/trops__dash-core 是否存在。

@trops/dash-core 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@trops/dash-core 可以商用吗?

@trops/dash-core 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@trops/dash-core 还在维护吗?

最新版本 0.1.895 发布于 2026/11/03(今天);至今共发布 851 个版本,其中过去 12 个月发布了 851 个;首次发布于 2026/02/25。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。