关于 plan
这是 LaunchDarkly SDK 引导流程中的规划技能,根据已检测的项目技术栈选择 SDK,并列出所需文件和变更。它涵盖单 SDK 与双 SDK 方案,并在实施前向用户展示计划。
主要功能
- 01根据项目类型匹配 SDK
- 02确定需修改的文件和入口
- 03规划通过环境变量配置凭据
- 04分别列出服务端与客户端步骤
- 05应用变更前展示计划
适用场景
- 01为已检测的技术栈选择 SDK
- 02规划 Next.js 服务端与浏览器端集成
- 03准备 LaunchDarkly 安装计划
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ launchdarkly/ ai-tooling --skill plan安装后在 Claude Code 中输入/plan确认已加载。
详细介绍
生成集成计划(SDK 安装)
根据检测到的信息,选择合适的 SDK,并规划所需的最少更改。
此技能位于 LaunchDarkly SDK Install (onboarding) 下;父级 Step 2 是 plan。前一步:检测代码库技术栈。下一步:应用代码更改。
选择合适的 SDK
使用 SDK 配方参考资料,将检测到的技术栈与 SDK 匹配。对于常见技术栈,请先查看该文件中的 Top 10 SDKs (start here);对于较少见的 SDK,请查看 (other) 部分。
关键决策:
| 项目类型 | SDK 类型 | 密钥类型 |
|---|---|---|
| 后端 API、服务端渲染应用、CLI 工具 | 服务端 SDK | SDK Key |
| 浏览器 SPA(React、Vue、Angular、原生 JS) | 客户端 SDK | Client-side ID |
| iOS 或 Android 原生应用 | 移动 SDK | Mobile Key |
| React Native | 移动 SDK | Mobile Key |
| Flutter(iOS、Android 或桌面 app 目标) | 客户端 SDK(Flutter) | Mobile Key |
| Flutter web | 客户端 SDK(Flutter) | Client-side ID |
| Electron 桌面应用 | 客户端 SDK(Node.js) | Client-side ID |
| Cloudflare Workers、Vercel Edge、AWS Lambda@Edge | Edge SDK | SDK Key |
| .NET 客户端(MAUI、Xamarin、WPF、UWP) | 移动 SDK(.NET) | Mobile Key |
| C/C++ 客户端应用 | 客户端 SDK(C/C++) | Mobile Key |
| C/C++ 服务端应用 | 服务端 SDK(C/C++) | SDK Key |
| Haskell 服务端 | 服务端 SDK(Haskell) | SDK Key |
| Lua 服务端 | 服务端 SDK(Lua) | SDK Key |
| Roku(BrightScript) | 客户端 SDK(Roku) | Mobile Key |
对于每个受支持的 SDK,软件包名称、安装提示和官方 Docs 链接,请使用 SDK 配方以及 snippets/ 下链接的文件。
双 SDK 集成
当用户要求同时集成服务端和客户端,或技术栈明显需要两个 LaunchDarkly SDK 时,请使用本节(例如,使用服务端评估并且在浏览器 UI 中使用标志的 Next.js 项目、同一工作区目标中包含独立后端和 SPA 仓库等)。
不要只集成一个 SDK,却对第二个 SDK 含糊带过,就算完成入门配置(没有在 package.json 中添加第二个包、没有第二条初始化路径、没有遵循第二份配置指南)。每个 SDK 都是独立的产品,有各自的安装命令和初始化流程。
对于这两个 SDK,计划都必须明确列出以下内容,不能遗漏:
服务端轨道:
- 配置指南/SDK 配置指南中的条目或代码片段名称
- 包名称(确切的制品名称)
- 安装命令(配置指南中的完整命令)
- 依赖文件(添加依赖项的位置)
- 入口文件(例如,
instrumentation.ts、API 入口、main.py) - 环境变量(通常为
LAUNCHDARKLY_SDK_KEY) - 初始化摘要(初始化运行的位置;使用的文档/代码片段)
客户端轨道:
- 配置指南/代码片段名称(必须与服务端对应的条目不同)
- 包名称(例如,React Web 与 Node 服务端不同,必须使用客户端制品)
- 安装命令(第二条命令,不能省略)
- 依赖文件
- 入口文件(例如,
app/providers.tsx、根布局、main.tsx) - 环境变量(打包工具前缀的客户端 ID,例如
NEXT_PUBLIC_...) - 初始化摘要(使用客户端配置指南中的 provider/wrapper/hook)
如果无法明确列出两个包和两个入口文件,就说明计划还没完成——请返回SDK 配置指南并重新检测。
重要区别:
- Next.js:服务端 SDK 用于在服务器上进行评估的 API 路由/服务端组件/RSC 上下文;React 客户端 SDK 用于客户端组件。如果用户要求两者都要,计划就必须完整列出两条轨道。如果用户只想先集成一种使用场景,请在计划中明确说明。
- Node.js:如果是后端服务(Express、Fastify 等),请使用服务端 SDK。桌面/Electron 应用也可以使用 Node.js 客户端 SDK。
- React:如果是独立 SPA,请使用
launchdarkly-react-client-sdk。如果属于 Next.js 项目,请参阅上文。 - .NET:ASP.NET 和后端服务请使用服务端 SDK(
LaunchDarkly.ServerSdk)。MAUI、Xamarin、WPF 和 UWP 请使用 .NET 移动 SDK(LaunchDarkly.ClientSdk,移动密钥)——参见 SDK 配置指南——.NET(客户端)。Blazor WebAssembly(以及其他托管在浏览器中的 .NET 客户端 UI)仍使用LaunchDarkly.ClientSdk,但要使用客户端 ID,而不是移动密钥——参见同一份配置指南。 - Flutter:请使用 Flutter 客户端 SDK(
launchdarkly_flutter_client_sdk——SDK 配置指南——Flutter)。典型的 iOS/Android/桌面应用构建请使用移动密钥;Flutter Web 请使用客户端 ID(并遵循项目对公开环境变量的处理方式)。如果用户要发布多个目标平台,请确认优先接入哪个平台,或为每个平台分别规划环境变量/配置。
规划变更
你的集成计划应准确指出:
1. 要修改的文件
使用在检测仓库技术栈期间收集的信息,具体包括检测到的包管理器、依赖文件和应用入口点:
- 依赖文件:检测期间识别出的文件(例如
package.json、requirements.txt、go.mod)——使用检测到的包管理器添加 SDK - 入口点文件:检测期间识别出的应用入口点——SDK 初始化代码将放在此处。双 SDK 方案会列出两个入口点(参见双 SDK 集成)。
- 环境变量/配置文件:对于真实密钥,优先使用集成根目录下的
.env(如果不存在则创建);确保该目录下的.gitignore中列有.env。仅在.env.example/.env.sample中放置占位符。如果项目不使用 dotenv,则遵循现有配置模式——关于征求同意、写入密钥以及服务器与客户端混合场景,请参见应用代码更改第 2 步。
2. 代码更改
对于范围内的每个 SDK(一条或两条轨道),描述具体更改:
- 添加 SDK 依赖项——使用 SDK 配方中的安装命令(双 SDK 时对每个包重复此操作)
- 添加 SDK 导入——在该轨道入口点顶部添加导入语句
- 添加 SDK 初始化——将该 SDK 配方/代码片段中的初始化代码,放在正确生命周期的前期(服务器端或客户端)
- 配置凭据——通过环境变量配置,绝不硬编码(根据轨道使用 SDK 密钥或客户端 ID)
3. 环境变量约定
检查项目如何处理配置:
.env: 如果技术栈使用 dotenv(或为 LaunchDarkly 引入 dotenv),则在.env不存在时,计划在集成根目录下创建该文件,然后根据需要添加LAUNCHDARKLY_SDK_KEY、LAUNCHDARKLY_CLIENT_SIDE_ID/ 带打包工具前缀的客户端 ID,或LAUNCHDARKLY_MOBILE_KEY(关于变量名称、使用真实值前征求同意以及服务器与客户端混合场景,请参见应用代码更改第 2 步)。计划检查该目录下的.gitignore是否包含.env(如果缺少则添加,并遵循其他仓库修改所需的相同用户许可)。.env.example/.env.sample: 如果存在,计划仅添加占位符条目(不得包含真实密钥)。- 配置模块或
process.env: 如果项目不使用.env,则计划遵循现有的密钥配置模式。
呈现计划
进行任何更改前,先向用户概述计划。
单个 SDK:
- 使用
[install command]安装[package name] - 将 SDK 依赖项添加到
[dependency file] - 在
[entrypoint file]中添加导入和初始化代码 - 将
[env var]添加到.env(如果文件不存在,则创建;获得用户同意后再填写真实值) - 确保
.env位于.gitignore中 - 如果项目使用
.env.example,则在其中添加占位符
除非用户明确批准其他依赖项变更,否则只添加 LaunchDarkly SDK 软件包。
双 SDK: 对每个轨道分别使用相同的编号格式(例如,“服务端:”步骤 1-7,然后“客户端:”步骤 1-7),并遵循双 SDK 集成。不要遗漏第二个轨道。
呈现计划后:
D6——非阻塞(除非用户反对,否则继续): 向用户呈现计划摘要,并附上类似“接下来我会按此计划操作——如果有任何问题,请说‘停止’或告诉我。”的说明。然后继续执行应用代码更改,无需等待用户明确批准。如果用户反对或指出问题,则停止并调整计划后再继续。
此流程特意设为非阻塞,以减少繁琐步骤。用户可以随时查看计划并打断。真正的安全门槛是应用步骤中的 D7(密钥同意)和 D8(非 LD 依赖项变更)。
如果入口点不明确,或可能适用多个 SDK,则这些特定问题必须阻塞流程——在呈现计划时使用结构化提问工具提出问题,并等待答复后再继续。
不要在计划确认时索要 SDK 密钥、客户端 ID 或移动端密钥——父流程会在应用代码更改时收集这些信息。上方的密钥类型列仅用于技术规划,不是索取机密信息的提示。
不要承诺或暗示会升级无关依赖项以满足最新 SDK 的要求——应用要求在更改任何非 LaunchDarkly 软件包前获得明确批准。
完成后:应用代码更改