关于 experience-ui-bundle-features-generate
此工作流技能使用 @salesforce/ui-bundle-features CLI,将经过测试的预构建功能安装到 Salesforce React 或 Angular UI bundle。它会先检查现有实现,并指导安装、集成和结果验证。
主要功能
- 01检测支持的 bundle 框架
- 02搜索并查看可用功能
- 03安装功能并处理冲突
- 04指导示例集成与构建检查
- 05检查未解析的元数据路径
适用场景
- 01为 UI bundle 添加身份验证或搜索
- 02自定义开发前查找可复用功能
- 03处理 bundle 安装冲突
- 04删除示例前验证集成
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ forcedotcom/ sf-skills --skill experience-ui-bundle-features-generate安装后在 Claude Code 中输入/experience-ui-bundle-features-generate确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/angular/features.mdreferences/common/conflict-resolution-schema.jsonreferences/react/features.mdscripts/detect-framework.sh详细介绍
UI Bundle 功能
使用 @salesforce/ui-bundle-features CLI,将预构建且经过测试的功能包安装到 Salesforce UI bundle 中,而不是手动构建。本文件是与框架无关的工作流主干;框架特定的详细信息——例如示例文件扩展名、功能会改写的文件、如何挂载功能的入口组件,以及构建命令——位于 <SKILL_DIR>/references/<framework>/ 下对应框架的参考文档中。
从头构建之前,务必先检查是否已有现成的功能。CLI 与框架无关:它会将每项功能适用于相应框架的变体安装到检测到的 bundle 中。目前最常用的是身份验证和搜索;运行 list --verbose 查看完整的当前目录,因为目录内容可能会逐渐增加。
归属说明: Agentforce AI 对话客户端和文件上传由单独的技能(
experience-ui-bundle-agentforce-client-generate、experience-ui-bundle-file-upload-generate)负责。如果目录中也列出了 Agentforce 或文件上传条目,不要通过两个渠道重复安装——请与用户确认他们希望采用哪种交付方式,并且绝不要在同一个 bundle 中重复安装相同功能。
软件包名称:
@salesforce/ui-bundle-features是规范的软件包名称。一些较旧的模板/示例仍引用已弃用的@salesforce/ui-bundle-features-experimental名称——绝不要使用-experimental后缀。如果命令无法解析,请先通过npm view @salesforce/ui-bundle-features version确认已发布的版本,再判断软件包名称是否有误。
第 0 步:确定框架
<SKILL_DIR> = 此技能自身目录的绝对路径(即存放此 SKILL.md 的文件夹);请根据上下文中的技能路径解析。
通常调用上下文已经确定了框架——由调用此技能的协调技能传递,或在用户请求中说明。请使用该框架。
此技能支持的框架,严格来说就是 <SKILL_DIR>/references/ 下包含 features.md 的参考文件夹(因此,react 对应 <SKILL_DIR>/references/react/features.md)。这是唯一可信来源——添加框架只需添加参考文件夹,此处无需改动。
-
如果已知框架——打开
<SKILL_DIR>/references/<framework>/features.md,并将其与本主干文档一并保留。该文档提供示例扩展名、集成目标、挂载示例和构建命令。 -
如果框架未知(独立运行时未说明框架)——在询问任何人之前,先对 UI bundle 根目录运行确定性检测器:
bash "<SKILL_DIR>/scripts/detect-framework.sh" "<path-to-uiBundles/<name>/ dir>"根据退出代码分支处理(不要解析文字输出):
react或angular(退出代码为 0)→ 使用该框架。不要询问用户——检测结果是确定的。打开<SKILL_DIR>/references/<framework>/features.md。ambiguous(退出代码为 2)→ 两种框架都存在。列出<SKILL_DIR>/references/,并询问用户要将功能安装到哪个 bundle 中。如果他们指定的框架没有对应的参考文件夹,则此处不支持该框架——停止。unknown(退出代码为 3)→ **未检测到受支持的框架。终止。**报告在 bundle 中未发现 React 或 Angular 的特征,因此无法安装功能,然后停止。不要猜测。
在以下步骤中,<framework> 均指此处选定的文件夹。
工作流
-
先搜索项目代码 — 安装任何内容之前,先检查
src/中是否已有实现。将搜索范围限定在src/,以免匹配到node_modules/或dist/。 -
搜索可用功能 — 使用
npx @salesforce/ui-bundle-features list,并通过--search <query>按关键词筛选。使用--verbose查看完整说明。 -
描述功能 — 接入前必须执行。 运行
npx @salesforce/ui-bundle-features describe <feature>,并在接入前使用npm view <package> readme阅读该功能的 README(使用上述输出中的Package:名称)。README 是接入规范:它会说明该功能的预期接入方式,包括任何可直接使用的入口组件,以及每个集成示例应放在哪个文件中。对照describe的Copy Operations目标路径下复制的源代码进行核验 — 该源代码(及其 JSDoc/注释)才是与当前版本匹配的实际安装内容,并且使用检测到的框架对应的文件类型。不要根据对文件名或组件 API 的猜测进行接入。跳过此步骤是功能安装成功却始终无法运行的最常见原因。 -
安装 — 使用
npx @salesforce/ui-bundle-features install <feature> --ui-bundle-dir <name>。主要选项:- 使用
--dry-run预览更改 - 使用
--yes以非交互模式运行(跳过冲突) - 使用
--on-conflict error检测冲突,然后使用--conflict-resolution <file>解决冲突
在此 UI bundle 中进行自定义前端/布局工作之前安装功能 — 功能可能会重写应用布局和路由文件(参见框架参考中的文件名),在手动修改布局后再安装可能会导致冲突。
- 使用
如果没有找到匹配的功能,请先询问用户,再构建自定义实现 — 相关功能可能使用了不同的名称。
冲突处理
在非交互环境中,使用两轮处理方式:
- 运行带有
--on-conflict error的安装命令,在不应用更改的情况下检测冲突。 - 编写解决文件之前,先阅读
references/common/conflict-resolution-schema.json,了解允许使用的键和值枚举。 - 在
<ui-bundle-dir>/conflict-resolution.json创建解决文件(路径相对于要安装到的 UI bundle 目录,而不是仓库根目录)。使用第一轮中 CLI 打印的冲突确切路径作为键,原样填写:
(冲突路径取决于检测到的框架,以 CLI 打印的内容为准 — 上述键仅作示例。)任何未列出的冲突路径默认设为{ "src/appLayout.tsx": "overwrite", "src/routes.tsx": "skip" }skip— CLI 不会覆盖未明确标记为overwrite的文件。 - 使用
--conflict-resolution <path-to-that-file>重新运行安装命令。
安装后:集成示例文件
功能可能会在 __examples__/ 目录(复数)下包含展示集成模式的示例文件。这些文件通常是完整、可运行的页面,具有具体名称,而非空白占位模板 — 使用检测到的框架对应的文件类型(参见框架参考)。对于每个文件:
- 阅读示例文件以了解其模式 — 将其视为可运行的参考实现,不要想当然地认为它只是一个存根。
- 阅读目标文件(见
describe输出)。 - 将示例中的模式应用到目标文件中。
- 重要 — 删除前先验证:
只有在构建通过且确认目标文件中已包含该模式之后,才能删除# Verify the build passes with the integrated pattern (build command per framework reference) npm run build || { echo "ERROR: Build failed after integration - do NOT delete __examples__/" exit 1 } # Verify the pattern from the example is actually present in the target. # Adjust the grep to a key symbol/import/component from the example, over the # detected framework's source files (see the framework reference for a worked pattern).__examples__/。
如果任一检查未通过,请勿删除 __examples__/ — 集成尚未完成。先修复集成,然后重新运行验证。
安装后:挂载开箱即用组件,不要自行编写平行实现
当某项功能提供集成点时,UI 必须使用该集成点,而不是自行编写平行实现。对于提供入口组件的功能,应挂载该组件(框架参考展示了挂载方式);不要编写直接查询数据的自定义页面。基于种子数据的自定义结果页面或原始 GraphQL 调用会绕过已安装且经过测试的功能,因此已部署的 sObject/CMS 逻辑永远不会运行。唯一的例外是用户明确选择不使用该功能并要求自定义实现——请确认用户确有此意,不要自行推断。
提示占位符
某些文案路径会使用 <descriptive-name> 占位符(例如 <desired-page-with-search-input>),CLI 无法解析这些占位符。安装后,请将这些文件重命名或移至预期目标位置,或者将其中的模式整合到现有文件中。这与上文的 __examples__/ 约定是两回事——单个复制路径可以使用其中任意一种机制。
身份验证功能:组织端先决条件
安装身份验证功能只会复制文件,不会配置组织。这与框架无关(纯组织/元数据配置)。在告知用户身份验证已完成之前,请指出仍需完成以下组织端步骤(不属于本技能的范围,但功能要实际运行就必须完成):
- 必须启用 Digital Experiences(Experience Cloud),为相关用户分配 Customer Community / Customer Community Plus 许可证,并启用 Salesforce Sites。
- 必须向社区和访客配置文件明确授予身份验证实用程序、登录/注册和密码重置类的 Apex 类访问权限——CLI 不会自动授予这些权限。
- 为身份验证流程涉及的任何对象配置访客配置文件共享规则/组织范围默认值。
- **已知限制:**注销存在已记录的 CSRF 处理缺陷(跟踪编号为 W-21253864)——请向用户说明这一点,不要声称注销功能已完全解决。
严重:每次安装后解析 <sfdxRoot>
CLI 可能会将文件复制到名为 <sfdxRoot> 的字面文件夹下——这是此项目 Salesforce DX 元数据根目录的未解析占位符(该目录来自 sfdx-project.json 的 packageDirectories[].path,例如 force-app/main/default)。留在该位置的文件无法部署。这与框架无关。
每次安装后:
find uiBundles/<AppName> -type d -regex '.*/<[^/]+>$'
如果找到文件,请将每个文件移至 <metadata-root>/<same-relative-subpath>(保留其对应的 -meta.xml 旁文件),并删除已清空的占位符目录。
验证:
- 重新运行
find uiBundles/<AppName> -type d -regex '.*/<[^/]+>$'——继续操作前,输出必须为空。