将插件从 Grafana 版本 9.x 迁移到 10.x
请按照以下说明将插件从 Grafana 版本 9.x 迁移到 10.x。
使用 React 18 验证插件行为
Grafana 10 包含了我们对 React 18 的升级以及对新的 React 客户端渲染 API 的使用。这些更改已通过 PR 64428 交付到核心 grafana
仓库。
尽管这些更新带来了许多显著的好处,但它们可能会影响插件的工作方式。特别是,由于改进 useEffect
时序一致性和自动批量状态更新的更改,可能会产生意想不到的副作用。
推荐操作
- 查看 React 18 升级文档。
- 针对最新的 grafana-dev docker 镜像(例如,这个镜像)之一测试您的插件。
- 如果您的插件受到影响,请在 论坛讨论 中添加评论。请务必与我们沟通,以便我们了解问题并提供帮助。
数据帧字段值现在只是数组
在 Grafana 10 中,数据帧中的值现在作为简单的 JavaScript 数组进行管理(参见 PR #66480)。不再需要将值包装在 Vector<T>
实现中。
大多数针对 9.x 的代码将继续工作,没有任何问题。一个例外是极少数现有代码直接实现 Vector<T>
而不是扩展或使用基类的情况。在这种情况下,代码应返回数组或扩展 FunctionalVector<T>
。所有 Vector 实现都已被弃用,将来将被删除。
在编写应在 9.x 上运行的插件时,请继续使用 Vector 接口。在这种情况下,当目标版本为 10+ 时,您现在可以使用简单的数组,而不是包装类。
为了使这种过渡无缝衔接,我们采用了原始 JavaScript Sin™。也就是说,我们使用 Vector 方法 扩展了原生 Array 原型。
更新到 React Router v6
从 Grafana 10 开始,插件可以开始使用 v6 版本的 react-router
。总的来说,react-router
v6 旨在简化路由配置,并为开发者提供更灵活和直观的 API。
如果当前插件版本需要保持与 Grafana v9 的兼容性,那么您可以继续在 Grafana v10 中使用 react-router@v5
。这两个版本都可用于插件。但是,我们强烈建议开发者尽快更新其插件以使用 v6 版本的 react-router
,因为 v5 版本将在 Grafana v11 中被弃用,随后将被删除。
有关更多一般信息,请参阅 官方 React Router v5 到 v6 迁移指南。
使用 @grafana/create-plugin
更新
按照以下步骤开始在您的插件中使用 react-router
v6
1. 更新构建相关配置:
通过在 <project-root>/.cprc.json
中设置以下功能标志来启用使用 react-router@v6
{
"features": {
"useReactRouterV6": true
}
}
现在使用 create-plugin 工具更新构建配置
- npm
- Yarn
- pnpm
npx @grafana/create-plugin@latest update
yarn dlx @grafana/create-plugin@latest update
pnpm dlx @grafana/create-plugin@latest update
更新构建配置后,您可能需要对插件进行其他更新。为此,请按照以下步骤操作
2. 使用 <Routes>
而不是 <Switch>
// Using <Routes> instead of <Switch> in `react-router` v6
import { Routes } from 'react-router-dom';
// ...
return (
<Routes>
<Route path="/" element={<Home />} />
</Routes>
);
3. 从 <Route>
组件中删除 exact
属性
return (
<Routes>
{/* BAD (Until v5) */}
<Route exact path="/" element={<Home />} />
{/* GOOD (From v6) */}
{/* (Routes are "exact" by default, you need to use the "*" to match sub-routes) */}
<Route path="/" element={<Home />} />
</Routes>
);
4. 有关更深入的更改,请遵循原始 react-router
迁移指南
访问 官方 react-router v5 到 v6 迁移指南 以获取更多信息。