Salesforce 开发人员体验如何改变您的工作方式

Salesforce 开发人员体验 (DX) 是一种在 Lightning Platform 贯穿其整个生命周期。它汇集了最好的 Lightning 平台可实现源代码驱动的开发、团队协作和治理、 以及 Salesforce 上自定义应用程序开发的敏捷性达到新的水平。

Salesforce DX 的亮点包括:

  • 您的工具,您的方式。借助 Salesforce DX,您可以使用已有的开发人员工具 知道。
  • 将最佳实践应用于软件开发的能力。源代码和 元数据存在于组织外部,为开发 Salesforce 提供了更高的敏捷性 团队环境中的应用。您的版本控制系统不是组织,而是 真相的来源。
  • 强大的命令行界面 (CLI) 消除了使用 用于开发、持续集成和交付的 Salesforce 组织。
  • 灵活且可配置的临时组织,用于开发和自动化 环境。这种新型组织使构建应用程序和 包。
  • 您可以将所需的任何 IDE 或文本编辑器与 CLI 一起使用,并外部化 源。
  • 适用于 VS Code 的 Salesforce 扩展 加速应用开发。这些工具提供了用于处理临时操作的功能 orgs、Apex、Lightning 组件和 Visualforce。

注意

Salesforce DX 工具需要启用 API 的系统权限,该权限提供 以编程方式访问组织的信息。

你准备好开始了吗?

以下是使用 Salesforce DX 完成工作的基本顺序。这些工作流 包括最常见的 CLI 命令。有关所有命令,请参阅 Salesforce CLI 命令参考。

  • 安装 Salesforce 命令行界面
  • 启用 Dev Hub
  • 使用示例 Repo 开始使用
  • 创建一个 应用
  • 迁移或 导入现有源
  • 使用示例存储库开始使用
    Salesforce DX 工具的最快方法是克隆 GitHub 存储库。使用其配置文件和 Salesforce 应用程序尝试一些常用的 Salesforce CLI 命令。除了应用程序的源代码外,存储库还包括示例数据和 Apex 测试。dreamhouse-lwc
  • 创建应用程序
    从头开始创建和开发在 Lightning 平台上运行的应用程序时,请遵循基本工作流程。
  • 迁移或导入现有源
    使用元数据 API 检索代码,然后转换源以在 Salesforce DX 项目中使用。
  • Salesforce DX 发行说明 使用 Salesforce 发行说明
    了解开发环境、打包、平台开发工具和 Salesforce API 的最新更新和更改。

使用示例存储库开始使用

使用 Salesforce DX 工具的最快方法是克隆 GitHub 存储库。使用其配置文件和 Salesforce应用程序尝试一些常用的Salesforce CLI命令。除了 应用程序的源代码,存储库包括示例数据和 Apex 测试。

dreamhouse-lwc

  1. 打开终端或命令提示符窗口,克隆 dreamhouse-lwc GitHub 使用 HTTPS 或 SSH 的示例存储库。
    HTTPS地址:git clone https://github.com/trailheadapps/dreamhouse-lwc.git
    SSH:git clone git@github.com:trailheadapps/dreamhouse-lwc.git
  2. 更改 dreamhouse-lwc 项目 目录。cd dreamhouse-lwc
  3. 授权您的 开发 Hub 组织,将其设置为默认值,然后 为其分配一个别名。
  4. sf org login web --set-default-dev-hub --alias DevHub在打开的浏览器中输入开发人员中心组织凭据。登录后 成功后,您可以关闭浏览器。
  5. 使用 config/project-scratch-def.json 文件创建一个临时组织,将该组织设置为 default,并为其分配一个别名。sf org create scratch --definition-file config/project-scratch-def.json --set-default --alias my-scratch-org该命令使用在上一个命令中设置的默认 Dev Hub 步。sf org login web
  6. 查看您已创建或登录的组织。sf org list第一个表显示你登录的 Dev Hub,第二个表显示 显示您创建的临时组织。两个表中最右边的一列 分别用 和 表示默认临时组织和 Dev Hub 组织。ALIAS 列显示 U 的别名 分配了每个组织。下面是一些示例输出。(U)(D)Non-scratch orgs ======================================================================================== | ALIAS USERNAME ORG ID CONNECTED STATUS | ─── ────── ────────────────────────────────────────── ────────────── ──────────────── | (D) DevHub jules@sf.com 00DB0000000c7j Connected Scratch orgs ============================================================================== | ALIAS USERNAME ORG ID EXPIRATION DATE | ─── ────────────── ───────────────────────── ────────────── ─────────────── | (U) my-scratch-org test-ibnpzayw@example.com 00D9A000000EFo 2023-05-12
  7. 将源位于 force-app 目录中的 Dreamforce 应用程序部署到临时组织。sf project deploy start --source-dir force-app
  8. 将 dreamhouse 权限集分配给 默认的临时组织用户 (test-ibnpzayw@example.com)。sf org assign permset --name dreamhouse
  9. 将示例数据从三个对象(Contact、Property 和 Broker)导入到 使用指定的计划定义文件临时组织。sf data import tree --plan data/sample-data-plan.json
  10. 运行 Apex 测试。sf apex run test --result-format human --wait 1默认情况下,Apex 测试以异步方式运行。如果测试在该值之前完成,则显示结果。 否则,请使用显示的命令通过作业 ID 获取结果。–wait
  11. 打开临时组织,并在“最近”下查看已部署的元数据 使用。sf org open
  12. 在应用程序启动器中,找到并打开 Dreamhouse 应用程序。

恭喜!您刚刚将应用程序部署到了一个新的临时组织。

创建应用程序

从头开始创建和开发 在 Lightning 平台上运行的应用程序。

  1. 设置你的 项目。
  2. 授权 Developer Hub 组织 项目。
  3. 配置本地 项目。
  4. 创建一个 Scratch 组织。
  5. 按下 从您的项目到 Scratch 组织。
  6. 开发应用。
  7. 拉取 source 使您的项目和 Scratch 组织保持同步。
  8. 运行测试。
  9. 添加、提交和推送更改。创建拉取请求。

使用以下方法之一部署应用:

  • 构建和 使用托管包发布应用
  • 生成和发布 使用元数据 API 的应用

迁移或导入现有源

使用元数据 API 检索代码,然后转换源代码以在 Salesforce DX 项目。

提示

如果当前存储库遵循从 元数据 API 检索,可以跳过检索步骤,直接进行转换 源。

  1. 设置你的 项目。
  2. 检索元数据。
  3. 将 您刚刚检索到的元数据格式的源。
  4. 授权 Developer Hub 组织 项目。
  5. 配置本地 项目。
  6. 创建一个 Scratch 组织。
  7. 按下 从您的项目到 Scratch 组织。
  8. 开发应用。
  9. 拉取 source 来同步您的项目和 Scratch 组织。
  10. 运行测试。
  11. 添加、提交和推送更改。创建拉取请求。

使用以下方法之一部署应用:

  • 使用托管包生成和发布应用。
  • 建 并使用元数据 API 发布您的应用。

Salesforce DX 发行说明

使用 Salesforce 发行说明了解 开发环境、打包、平台开发工具和 Salesforce 蜜蜂属。

有关最新更改,请访问:

  • Salesforce Extensions for Visual Studio Code 发行说明
  • Salesforce CLI 版本 笔记
  • 开发环境发布 注释(包括 Developer Edition 组织、沙箱和临时组织)
  • 打包发行说明
  • 面向开发人员的新项目和更改项目(包括 Apex、标准对象、元数据 API 等)

在组织中启用 Dev Hub 功能

在 PBO 中启用 Dev Hub 功能,以便创建和管理临时组织,创建 并管理第二代软件包,并使用 Einstein 功能。Scratch 组织是一次性的 Salesforce 组织来支持开发和测试。

在 PBO 中启用 Dev Hub 是安全的,不会导致任何性能或客户问题。开发 Hub 包含具有权限的对象,这些权限允许管理员控制访问级别 可供用户和组织使用。

注意

无法在沙盒中启用 Dev Hub。

如果选择试用版或 Developer Edition 组织作为开发人员中心,请考虑这些因素。

  • 您每天最多可以创建 6 个临时组织和软件包版本,最多可以创建 3 个 活跃的临时组织。
  • 试用组织在其到期日期到期。
  • Developer Edition 组织可能会因不活动而过期。
  • 可以在不是 Dev Hub 的 Developer Edition 组织中定义命名空间,并且可以 在不包含命名空间的 Developer Edition 组织中启用 Dev Hub。
  • 如果计划创建包版本或运行持续集成作业,最好 使用 PBO 作为开发人员中心,因为临时组织和包版本限制更高。包 版本与开发人员中心组织相关联。当试用版或 Developer Edition 组织到期时, 您将无法访问包版本。

注意

从合作伙伴社区注册的合作伙伴试用组织具有不同的暂存组织限制。 请参阅合作伙伴的临时组织分配。 合作伙伴可以创建合作伙伴版临时组织:合作伙伴开发人员、合作伙伴企业、合作伙伴 组和合作伙伴专业人员。仅当从 合作伙伴业务组织中的 Dev Hub。有关详细信息,请参阅《第一代托管打包开发人员指南》中的合作伙伴支持的 Scratch 组织版本。

Dev Hub 组织实例确定临时组织的创建位置。

  • 从政府云中的开发人员中心组织创建的临时组织是在政府上创建的 云实例。
  • 从公有云中的 Dev Hub 组织创建的临时组织是在公有云上创建的 实例。

若要在组织中启用 Dev Hub,请执行以下操作:

  1. 以系统管理员身份登录到 Developer Edition、试用版或生产组织(对于 客户)或业务组织(适用于 ISV)。
  2. 在“设置”中,在“快速查找”框中输入“开发人员中心”,然后选择“开发人员中心”。如果在“设置”菜单中未看到“开发人员中心”,请确保你的组织是受支持的组织之一 版本。
  3. 若要启用 Dev Hub,请单击“启用”。启用 Dev Hub 后,无法禁用它。
  • 免费有限访问许可证
    申请 Salesforce 有限访问权限 – 免费许可证,用于向生产组织中的非管理员用户提供帐户,当这些用户只需要访问特定应用程序、功能或设置时。此许可证无法访问标准 Salesforce 对象,例如客户、联系人和商机。
  • 启用解锁和第二代托管打包 在组织中启用打包
    ,以便可以开发解锁包或第二代托管包。您可以在临时组织、沙盒组织和目标订阅者组织中使用软件包。
  • 沙盒
    中启用源跟踪 在源(生产)组织中启用源跟踪,以便 Developer 和 Developer Pro 沙盒自动跟踪从它创建的沙盒和 Salesforce DX 项目之间的更改。现有沙盒在刷新之前不会启用源跟踪。
  • 启用 Einstein 功能
    在开发人员中心打开 Einstein 功能,以消除在临时组织中启用聊天机器人功能的手动步骤。当您接受 Einstein 的服务条款时,从此 Dev Hub 组织创建的每个临时组织都不需要单独接受。如果您之前接受了 Einstein 的服务条款以启用与 Einstein 相关的功能,则此设置已启用。
  • 启用语言扩展包 (Beta)
    在开发人员中心启用语言扩展包,以创建包含其他包中组件翻译的语言扩展包。此功能在未锁定的包以及第一代和第二代托管包中可用。
  • 添加 Salesforce DX 用户
    默认情况下,系统管理员可以访问 Dev Hub 组织。您可以允许更多用户访问 Dev Hub 组织,以便他们可以创建临时组织并使用其他特定于开发人员的功能。

免费有限访问许可证

申请 Salesforce 有限访问权限 – 向非管理员用户提供帐户的免费许可证 在您的生产组织中,当这些用户只需要访问特定应用、功能或 设置。标准 Salesforce 对象(如客户、联系人和商机)不是 可通过此许可证访问。

请联系您的 Salesforce 客户经理申请此许可证。Salesforce 管理员可以 将 Salesforce Limited Access – Free 许可证升级为标准 Salesforce 许可证 时间。

第二代托管软件包和解锁软件包

要创建临时组织和解锁或第二代托管软件包,开发人员 需要访问开发人员中心组织,这通常是生产组织。销售团队 然后,管理员可以向 Dev Hub 对象 (ScratchOrgInfo、 ActiveScratchOrg 和 NamespaceRegistry)。

若要为开发人员提供对开发人员中心组织的适当访问权限,请创建一个权限集,该权限集 包含以下权限:

  • 对象设置 >临时组织信息 >读取、创建和删除
  • “活动临时组织”>对象设置>读取和删除
  • “命名空间注册表>读取”>对象设置(在 Scratch 组织)

为用户提供创建解锁或第二代托管的能力 包和包版本,权限集还必须包含:

  • 创建和更新第二代软件包>系统权限

如果您选择在临时组织中测试软件包,则 创建和更新 在以下情况下,创建临时组织时也需要第二代软件包权限 您在 sfdx-project.json 文件中指定了祖先版本。 或者,将 –noancestors 标志与 sf org 一起使用 create 命令。

有关更多信息,请参阅 Salesforce DX 开发人员指南:添加 Salesforce DX 用户。

DevOps中心

DevOps Center 作为托管包安装。大多数团队成员,例如构建者和 开发人员,无需安装和配置 DevOps Center。您可以提供这些 团队成员通过分配 他们此许可证和有限访问用户配置文件。

请参阅 Salesforce 帮助:分配 DevOps Center 权限集

当前不支持的功能

  • 要将组织形状用于临时组织或临时组织快照(试点),请务必 分配 Salesforce 用户许可证。Salesforce 有限访问 – 免费许可证 目前不支持。
  • Salesforce 有限访问 – 免费许可证不提供对某些 Salesforce CLI 命令,例如 .请联系您的 Salesforce 管理员,了解 API 限制信息。sf limits api display

启用解锁和第二代托管打包

在组织中启用打包,以便开发未锁定的包或第二代 托管包。您可以在临时组织、沙盒组织和目标中使用软件包 订阅者组织。

在组织中启用 Dev Hub。

  1. 登录到已启用 Dev Hub 的组织。
  2. 在“设置”中,在“快速查找”框中输入“开发人员中心”,然后选择“开发人员中心”。
  3. 选择“启用解锁包”和“第二代托管” 包。启用第二代打包后,无法禁用它。
  4. (可选)允许非管理员用户访问开发人员中心以创建包。为非管理员用户分配“创建和更新第二代包”用户权限。 有关详细信息,请参阅添加 Salesforce DX 用户。

在沙盒中启用源跟踪

在源(生产)组织中启用源跟踪,以便 Developer 和 Developer Pro 沙盒会自动跟踪从它创建的沙盒和 Salesforce DX 之间的更改 项目。在刷新之前,现有沙盒不会启用源跟踪 他们。

所需的用户权限
要查看沙盒,请执行以下操作:View 设置和配置
要创建、刷新、激活和删除沙盒,请执行以下操作:管理沙盒
要启用源跟踪,请执行以下操作:自定义应用程序

要在 Sandboxes for Developer 和 Developer Pro 沙盒中启用源跟踪,请执行以下操作:

  1. 登录到源(生产)组织。
  2. 在“设置”的“快速查找”框中,输入“开发人员中心”,然后选择“开发人员中心”。如果在“设置”菜单中未看到“Dev Hub”,请确保源组织是 支持的版本。
  3. 在 Developer 和 Developer Pro 中选择“启用源跟踪” 沙盒
  4. 刷新任何现有的 Developer 或 Developer Pro 沙盒以启用此功能。系统会自动为任何新创建的开发人员或开发人员启用源跟踪 专业沙盒。

启用 Einstein 功能

在开发人员中心中打开 Einstein 功能,以消除启用 临时组织中的聊天机器人功能。当您接受 Einstein 服务条款时, 从此 Dev Hub 组织创建的每个临时组织不需要单独接受。如果 您之前已接受 Einstein 的服务条款,以开启 Einstein 相关的 功能,此设置已启用。

在尝试使用聊天机器人创建临时组织之前,请完成此任务 特征。

  1. 登录到开发人员中心组织。
  2. 在“设置”中,在“快速查找”框中输入“开发人员中心”,然后 选择“开发人员中心”。
  3. 在“Dev Hub 设置”页上,打开“启用 Einstein” 特征

启用语言扩展包(测试版)

在开发人员中心启用语言扩展包,以创建语言扩展包 包含其他包中组件的翻译。此功能在解锁和 第一代和第二代托管包。

注意

此功能是一项测试版服务。客户可以选择单独试用此类测试版服务 自由裁量权。对测试版服务的任何使用均受适用的测试版服务条款的约束 在协议和条款中提供。

语言扩展包只能包含 Translations 和 CustomObjectTranslations。如果 基础包包含无法翻译的组件,这些组件在以下情况下不包括在内 创建语言扩展包。

  1. 在“开发人员中心”的“设置”中,在“快速查找”框中,输入“开发人员中心”,然后 然后选择“开发人员中心”。
  2. 在“开发人员中心设置”页上,打开“启用语言扩展” 包

添加 Salesforce DX 用户

默认情况下,系统管理员可以访问 Dev Hub 组织。您可以启用更多用户 访问 Dev Hub 组织,以便他们可以创建临时组织并使用其他 特定于开发人员的功能。

您可以将 Salesforce DX 与以下标准用户许可证一起使用:Salesforce、Salesforce 平台和开发人员。

如果您的组织具有开发人员许可证,则可以使用开发人员配置文件添加用户,然后 为他们分配提供的开发人员权限集。或者,您可以添加用户 使用标准用户或系统管理员配置文件。对于标准用户,您 必须创建具有所需 Salesforce DX 权限的权限集。我们 建议您避免将用户添加为系统管理员,除非他们的工作 需要该级别的权限,而不仅仅是 Dev Hub 组织访问权限。

  • 将开发人员用户添加到开发人员中心组织
    使用开发人员许可证,添加具有开发人员配置文件的用户,并为其分配开发人员权限集。
  • 将系统管理员或标准用户添加到开发人员中心组织
    仅当系统管理员用户的工作需要该级别的权限时,才添加系统管理员用户。否则,请添加标准用户并创建具有所需 Salesforce DX 权限的权限集。
  • Salesforce DX 用户的
    权限集 要授予对开发人员中心组织的完全访问权限,您创建的开发人员权限集或自定义权限集将授予对特定 Salesforce DX 对象的访问权限。

将开发人员用户添加到开发人员中心组织

使用开发人员许可证,添加具有开发人员配置文件的用户,并为其分配 开发人员权限集。

  1. 在 Dev Hub 组织中创建用户。
    1. 在“设置”中,在“快速查找”框中输入“用户”,然后选择“用户”。
    2. 单击“新建用户”。
    3. 填写表格。
    4. 选择“开发人员”作为“用户许可证”,然后选择“开发人员”作为“配置文件”。
    5. 填写完剩余信息后,单击“保存”。
  2. 将内置的“开发人员”权限集分配给用户。
    1. 在用户详细信息页上的“权限集分配”相关列表中,单击“编辑分配”。
    2. 在“可用权限集”中,添加“开发人员”权限集,然后单击“保存”。

开发人员权限集授予对 Dev Hub 功能和第二代包的访问权限。 有关详细信息,请参阅 Salesforce DX 用户的权限集。

将系统管理员或标准用户添加到开发人员中心 组织

仅当系统管理员用户的工作需要该级别的权限时,才添加系统管理员用户。 否则,请添加标准用户并使用所需的 Salesforce DX 创建权限集 权限。

  1. 如有必要,请在 Dev Hub 组织中创建用户。
    1. 在“设置”中,在“快速查找”框中输入“用户”,然后选择“用户”。
    2. 单击“新建用户”。
    3. 填写表单,并分配“系统管理员”或“标准用户”配置文件。
    4. 点击保存
    如果要添加系统管理员用户,则可以在此处停止。
  2. 如果您要添加标准用户,请为 Salesforce DX 用户创建权限集(如果没有) 有一个。
    1. 在“设置”中,在“快速查找”框中输入“权限集”,然后选择“权限集”。
    2. 单击“新建”。
    3. 输入标签、API 名称和描述。API 名称是 API 使用的唯一名称,并且 托管包。
    4. 选择用户许可证选项。如果计划将此权限集分配给具有不同许可证的多个用户,请选择“”。
    5. 点击保存。此时将显示权限集概述页面。从这里,您可以 导航到要为 Salesforce DX 添加或更改的权限。 有关所需权限,请参阅 Salesforce DX 用户的权限集。
  3. 将 Salesforce DX 权限集应用于标准用户。
    1. 在“设置”中,在“快速查找”框中输入“权限集”,然后选择“权限集”。
    2. 选择 Salesforce DX 权限集。
    3. 在权限集工具栏中,单击“管理分配”。
    4. 单击“添加分配”。
    5. 选择要向其分配权限集的用户。
    6. 单击分配
    7. 单击完成

您可以通过修改权限来限制用户的访问权限。

Salesforce DX 用户的权限集

若要授予对开发人员中心组织的完全访问权限,请执行开发人员权限集或自定义权限 您创建的权限集授予对特定 Salesforce DX 对象的访问权限。

  • 对象设置 >临时组织信息 >读取、创建、编辑和删除
  • 活动临时组织>对象设置>读取、编辑和删除
  • 对象设置>命名空间注册表>读取

若要在开发人员中心组织中使用第二代包,权限集还必须 包含:

  • 创建和更新第二代软件包>系统权限

此权限提供对以下内容的访问:

Salesforce CLI 命令工具 API 对象(创建和编辑)
package create套餐2
package version createPackage2VersionCreateRequest
package version updatePackage2版本

将开发人员用户添加到开发人员中心组织

使用开发人员许可证,添加具有开发人员配置文件的用户,并为其分配 开发人员权限集。

  1. 在 Dev Hub 组织中创建用户。
    1. 在“设置”中,在“快速查找”框中输入“用户”,然后选择“用户”。
    2. 单击“新建用户”。
    3. 填写表格。
    4. 选择“开发人员”作为“用户许可证”,然后选择“开发人员”作为“配置文件”。
    5. 填写完剩余信息后,单击“保存”。
  2. 将内置的“开发人员”权限集分配给用户。
    1. 在用户详细信息页上的“权限集分配”相关列表中,单击“编辑分配”。
    2. 在“可用权限集”中,添加“开发人员”权限集,然后单击“保存”。

开发人员权限集授予对 Dev Hub 功能和第二代包的访问权限。 有关详细信息,请参阅 Salesforce DX 用户的权限集。

将系统管理员或标准用户添加到开发人员中心 组织

仅当系统管理员用户的工作需要该级别的权限时,才添加系统管理员用户。 否则,请添加标准用户并使用所需的 Salesforce DX 创建权限集 权限。

  1. 如有必要,请在 Dev Hub 组织中创建用户。
    1. 在“设置”中,在“快速查找”框中输入“用户”,然后选择“用户”。
    2. 单击“新建用户”。
    3. 填写表单,并分配“系统管理员”或“标准用户”配置文件。
    4. 点击保存
    如果要添加系统管理员用户,则可以在此处停止。
  2. 如果您要添加标准用户,请为 Salesforce DX 用户创建权限集(如果没有) 有一个。
    1. 在“设置”中,在“快速查找”框中输入“权限集”,然后选择“权限集”。
    2. 单击“新建”。
    3. 输入标签、API 名称和描述。API 名称是 API 使用的唯一名称,并且 托管包。
    4. 选择用户许可证选项。如果计划将此权限集分配给具有不同许可证的多个用户,请选择“”。
    5. 点击保存。此时将显示权限集概述页面。从这里,您可以 导航到要为 Salesforce DX 添加或更改的权限。 有关所需权限,请参阅 Salesforce DX 用户的权限集。
  3. 将 Salesforce DX 权限集应用于标准用户。
    1. 在“设置”中,在“快速查找”框中输入“权限集”,然后选择“权限集”。
    2. 选择 Salesforce DX 权限集。
    3. 在权限集工具栏中,单击“管理分配”。
    4. 单击“添加分配”。
    5. 选择要向其分配权限集的用户。
    6. 单击分配
    7. 单击完成

您可以通过修改权限来限制用户的访问权限。

Salesforce DX 用户的权限集

若要授予对开发人员中心组织的完全访问权限,请执行开发人员权限集或自定义权限 您创建的权限集授予对特定 Salesforce DX 对象的访问权限。

  • 对象设置 >临时组织信息 >读取、创建、编辑和删除
  • 活动临时组织>对象设置>读取、编辑和删除
  • 对象设置>命名空间注册表>读取

若要在开发人员中心组织中使用第二代包,权限集还必须 包含:

  • 创建和更新第二代软件包>系统权限

此权限提供对以下内容的访问:

Salesforce CLI 命令工具 API 对象(创建和编辑)
package create套餐2
package version createPackage2VersionCreateRequest
package version updatePackage2版本

添加 Salesforce DX 用户

默认情况下,系统管理员可以访问 Dev Hub 组织。您可以启用更多用户 访问 Dev Hub 组织,以便他们可以创建临时组织并使用其他 特定于开发人员的功能。

您可以将 Salesforce DX 与以下标准用户许可证一起使用:Salesforce、Salesforce 平台和开发人员。

如果您的组织具有开发人员许可证,则可以使用开发人员配置文件添加用户,然后 为他们分配提供的开发人员权限集。或者,您可以添加用户 使用标准用户或系统管理员配置文件。对于标准用户,您 必须创建具有所需 Salesforce DX 权限的权限集。我们 建议您避免将用户添加为系统管理员,除非他们的工作 需要该级别的权限,而不仅仅是 Dev Hub 组织访问权限。

  • 将开发人员用户添加到开发人员中心组织
    使用开发人员许可证,添加具有开发人员配置文件的用户,并为其分配开发人员权限集。
  • 将系统管理员或标准用户添加到开发人员中心组织
    仅当系统管理员用户的工作需要该级别的权限时,才添加系统管理员用户。否则,请添加标准用户并创建具有所需 Salesforce DX 权限的权限集。
  • Salesforce DX 用户的
    权限集 要授予对开发人员中心组织的完全访问权限,您创建的开发人员权限集或自定义权限集将授予对特定 Salesforce DX 对象的访问权限。

将开发人员用户添加到开发人员中心组织

使用开发人员许可证,添加具有开发人员配置文件的用户,并为其分配 开发人员权限集。

  1. 在 Dev Hub 组织中创建用户。
    1. 在“设置”中,在“快速查找”框中输入“用户”,然后选择“用户”。
    2. 单击“新建用户”。
    3. 填写表格。
    4. 选择“开发人员”作为“用户许可证”,然后选择“开发人员”作为“配置文件”。
    5. 填写完剩余信息后,单击“保存”。
  2. 将内置的“开发人员”权限集分配给用户。
    1. 在用户详细信息页上的“权限集分配”相关列表中,单击“编辑分配”。
    2. 在“可用权限集”中,添加“开发人员”权限集,然后单击“保存”。

开发人员权限集授予对 Dev Hub 功能和第二代包的访问权限。 有关详细信息,请参阅 Salesforce DX 用户的权限集。

将系统管理员或标准用户添加到开发人员中心 组织

仅当系统管理员用户的工作需要该级别的权限时,才添加系统管理员用户。 否则,请添加标准用户并使用所需的 Salesforce DX 创建权限集 权限。

  1. 如有必要,请在 Dev Hub 组织中创建用户。
    1. 在“设置”中,在“快速查找”框中输入“用户”,然后选择“用户”。
    2. 单击“新建用户”。
    3. 填写表单,并分配“系统管理员”或“标准用户”配置文件。
    4. 点击保存
    如果要添加系统管理员用户,则可以在此处停止。
  2. 如果您要添加标准用户,请为 Salesforce DX 用户创建权限集(如果没有) 有一个。
    1. 在“设置”中,在“快速查找”框中输入“权限集”,然后选择“权限集”。
    2. 单击“新建”。
    3. 输入标签、API 名称和描述。API 名称是 API 使用的唯一名称,并且 托管包。
    4. 选择用户许可证选项。如果计划将此权限集分配给具有不同许可证的多个用户,请选择“”。
    5. 点击保存。此时将显示权限集概述页面。从这里,您可以 导航到要为 Salesforce DX 添加或更改的权限。 有关所需权限,请参阅 Salesforce DX 用户的权限集。
  3. 将 Salesforce DX 权限集应用于标准用户。
    1. 在“设置”中,在“快速查找”框中输入“权限集”,然后选择“权限集”。
    2. 选择 Salesforce DX 权限集。
    3. 在权限集工具栏中,单击“管理分配”。
    4. 单击“添加分配”。
    5. 选择要向其分配权限集的用户。
    6. 单击分配
    7. 单击完成

您可以通过修改权限来限制用户的访问权限。

Salesforce DX 用户的权限集

若要授予对开发人员中心组织的完全访问权限,请执行开发人员权限集或自定义权限 您创建的权限集授予对特定 Salesforce DX 对象的访问权限。

  • 对象设置 >临时组织信息 >读取、创建、编辑和删除
  • 活动临时组织>对象设置>读取、编辑和删除
  • 对象设置>命名空间注册表>读取

若要在开发人员中心组织中使用第二代包,权限集还必须 包含:

  • 创建和更新第二代软件包>系统权限

此权限提供对以下内容的访问:

Salesforce CLI 命令工具 API 对象(创建和编辑)
package create套餐2
package version createPackage2VersionCreateRequest
package version updatePackage2版本

添加 Salesforce DX 用户

默认情况下,系统管理员可以访问 Dev Hub 组织。您可以启用更多用户 访问 Dev Hub 组织,以便他们可以创建临时组织并使用其他 特定于开发人员的功能。

您可以将 Salesforce DX 与以下标准用户许可证一起使用:Salesforce、Salesforce 平台和开发人员。

如果您的组织具有开发人员许可证,则可以使用开发人员配置文件添加用户,然后 为他们分配提供的开发人员权限集。或者,您可以添加用户 使用标准用户或系统管理员配置文件。对于标准用户,您 必须创建具有所需 Salesforce DX 权限的权限集。我们 建议您避免将用户添加为系统管理员,除非他们的工作 需要该级别的权限,而不仅仅是 Dev Hub 组织访问权限。

  • 将开发人员用户添加到开发人员中心组织
    使用开发人员许可证,添加具有开发人员配置文件的用户,并为其分配开发人员权限集。
  • 将系统管理员或标准用户添加到开发人员中心组织
    仅当系统管理员用户的工作需要该级别的权限时,才添加系统管理员用户。否则,请添加标准用户并创建具有所需 Salesforce DX 权限的权限集。
  • Salesforce DX 用户的
    权限集 要授予对开发人员中心组织的完全访问权限,您创建的开发人员权限集或自定义权限集将授予对特定 Salesforce DX 对象的访问权限。

将开发人员用户添加到开发人员中心组织

使用开发人员许可证,添加具有开发人员配置文件的用户,并为其分配 开发人员权限集。

  1. 在 Dev Hub 组织中创建用户。
    1. 在“设置”中,在“快速查找”框中输入“用户”,然后选择“用户”。
    2. 单击“新建用户”。
    3. 填写表格。
    4. 选择“开发人员”作为“用户许可证”,然后选择“开发人员”作为“配置文件”。
    5. 填写完剩余信息后,单击“保存”。
  2. 将内置的“开发人员”权限集分配给用户。
    1. 在用户详细信息页上的“权限集分配”相关列表中,单击“编辑分配”。
    2. 在“可用权限集”中,添加“开发人员”权限集,然后单击“保存”。

开发人员权限集授予对 Dev Hub 功能和第二代包的访问权限。 有关详细信息,请参阅 Salesforce DX 用户的权限集。

将系统管理员或标准用户添加到开发人员中心 组织

仅当系统管理员用户的工作需要该级别的权限时,才添加系统管理员用户。 否则,请添加标准用户并使用所需的 Salesforce DX 创建权限集 权限。

  1. 如有必要,请在 Dev Hub 组织中创建用户。
    1. 在“设置”中,在“快速查找”框中输入“用户”,然后选择“用户”。
    2. 单击“新建用户”。
    3. 填写表单,并分配“系统管理员”或“标准用户”配置文件。
    4. 点击保存
    如果要添加系统管理员用户,则可以在此处停止。
  2. 如果您要添加标准用户,请为 Salesforce DX 用户创建权限集(如果没有) 有一个。
    1. 在“设置”中,在“快速查找”框中输入“权限集”,然后选择“权限集”。
    2. 单击“新建”。
    3. 输入标签、API 名称和描述。API 名称是 API 使用的唯一名称,并且 托管包。
    4. 选择用户许可证选项。如果计划将此权限集分配给具有不同许可证的多个用户,请选择“”。
    5. 点击保存。此时将显示权限集概述页面。从这里,您可以 导航到要为 Salesforce DX 添加或更改的权限。 有关所需权限,请参阅 Salesforce DX 用户的权限集。
  3. 将 Salesforce DX 权限集应用于标准用户。
    1. 在“设置”中,在“快速查找”框中输入“权限集”,然后选择“权限集”。
    2. 选择 Salesforce DX 权限集。
    3. 在权限集工具栏中,单击“管理分配”。
    4. 单击“添加分配”。
    5. 选择要向其分配权限集的用户。
    6. 单击分配
    7. 单击完成

您可以通过修改权限来限制用户的访问权限。

Salesforce DX 用户的权限集

若要授予对开发人员中心组织的完全访问权限,请执行开发人员权限集或自定义权限 您创建的权限集授予对特定 Salesforce DX 对象的访问权限。

  • 对象设置 >临时组织信息 >读取、创建、编辑和删除
  • 活动临时组织>对象设置>读取、编辑和删除
  • 对象设置>命名空间注册表>读取

若要在开发人员中心组织中使用第二代包,权限集还必须 包含:

  • 创建和更新第二代软件包>系统权限

此权限提供对以下内容的访问:

Salesforce CLI 命令工具 API 对象(创建和编辑)
package create套餐2
package version createPackage2VersionCreateRequest
package version updatePackage2版本

项目设置

Salesforce DX 为组织的元数据(代码和 配置)、组织模板、示例数据以及团队的所有测试。为了保持一致性 团队的开发流程,将这些项目存储在源代码管理系统 (SCS) 中。取回 当您准备好开发新功能时,团队存储库的内容。

您可以使用您喜欢的 SCS。我们的大多数示例都使用 Git。

您有不同的选项来创建 Salesforce DX 项目,具体取决于您想要的方式 开始。

使用示例存储库 在 GitHub 上使用我们的一个示例存储库和您自己的 SCS 探索 Salesforce DX 的功能 和工具集。
创建一个 来自现有来源的 Salesforce DX 项目从现有的 Salesforce 应用程序开始,创建 Salesforce DX 项目。
创建一个 Salesforce DX 项目使用 Salesforce DX 项目在 Salesforce Platform 上创建应用程序。
  • GitHub 上的示例存储库 若要快速入门,请参阅 GitHub
    存储库。此独立应用程序包含一个示例 DX 项目,其中包含多个 Apex 类、Aura 组件、自定义对象、示例数据和 Apex 测试。dreamhouse-lwc
  • 创建 Salesforce DX 项目 Salesforce DX 项目
    具有特定的结构和将目录标识为 Salesforce DX 项目的配置文件。
  • Salesforce DX 项目结构和源格式 Salesforce DX 项目具有特定的项目结构和源格式
    。源格式使用与元数据 API 使用的文件和文件扩展名不同的一组文件和文件扩展名。当您使用命令从组织中检索元数据时,Salesforce CLI 会将其以源格式存储在您的项目中。当您部署元数据时,Salesforce CLI 会将其转换为元数据 API 所需的格式。project retrieve start
  • 同步时如何排除
    在本地文件系统和目标组织之间同步元数据时,通常有要排除的源文件。同样,在将源转换为 Salesforce DX 源格式时,您经常希望排除某些文件。在这两种情况下,您都可以使用文件排除特定目录中的单个文件或所有文件。.forceignore
  • 从现有源
    创建 Salesforce DX 项目 如果您是 Salesforce 开发人员、合作伙伴或 ISV,则您的打包组织中的托管包中可能有现有源,或者沙盒或生产组织中的应用程序源中可能有现有源。在开始使用 Salesforce DX 之前,请将现有源检索到 Salesforce DX 项目中。
  • 将元数据格式的文件转换为源格式
    如果您已经有一个存储库,其中您直接使用元数据 API 从组织中检索元数据,则这些文件采用元数据格式。您可以将这些文件转换为源格式,并将它们添加到您的 Salesforce DX 项目中。然后,您可以使用 CLI 命令在组织内部署和检索它们,并使用源跟踪来跟踪更改。
  • Salesforce DX 用户名和组织
    许多 Salesforce CLI 命令连接到组织以完成其任务。例如,创建临时组织的命令连接到开发人员中心组织。和命令在项目和组织之间同步源代码。在每种情况下,CLI 命令都需要用户名来确定要连接到哪个组织。用户名在整个 Salesforce 生态系统中是唯一的,并且仅与一个组织相关联。org create scratchproject deploy startproject retrieve start
  • 将命名空间链接到 Dev Hub 组织 要将命名空间与临时组织一起使用,必须将命名空间注册的 Developer Edition 组织链接到 Dev Hub 组织
  • Salesforce DX 项目配置
    项目配置文件 sfdx-project.json 表示该目录是 Salesforce DX 项目。配置文件包含项目信息,便于组织授权和创建第二代包。它还告诉 Salesforce CLI 在项目和组织之间同步时将文件放在哪里。
  • 多个包目录 创建 Salesforce DX 项目
    时,我们建议您通过在本地创建多个包目录,将元数据组织到逻辑分组中。然后,在文件中定义这些目录。您可以对应用程序或自定义项的类似代码和源代码进行分组,以更好地组织团队的存储库。稍后,如果您决定使用第二代软件包 (2GP),则这些目录对应于实际的 2GP 软件包。sfdx-project.json
  • 在部署
    之前替换代码中的字符串 在将文件部署到组织之前,自动将元数据源文件中的字符串替换为特定值。

GitHub 上的示例存储库

若要快速入门,请参阅 GitHub 存储库。此独立应用程序包含一个具有多个 Apex 的示例 DX 项目 类、Aura 组件、自定义对象、示例数据和 Apex 测试。

dreamhouse-lwc

克隆此存储库会创建目录 dreamhouse-lwc。有关详细信息,请参阅存储库的自述文件。

假设您已经设置了 Git,请使用该命令从命令行克隆存储库的 main 分支。git clone

要使用 HTTPS,请执行以下操作:

git clone https://github.com/trailheadapps/dreamhouse-lwc

要使用 SSH,请执行以下操作:

git clone git@github.com:trailheadapps/dreamhouse-lwc.git

如果您不想使用 Git.zip,请使用 克隆,或在 GitHub 网站上下载。解压缩本地文件上任意位置的源 系统。

有关后续步骤,请参阅使用示例存储库开始。

提示

在示例库中查看更复杂的示例。

示例库包含示例应用,这些应用显示了可以在 Salesforce平台。它们会不断更新以包含最新功能 和最佳实践。

创建 Salesforce DX 项目

Salesforce DX 项目具有特定的结构和配置文件,用于标识 目录作为 Salesforce DX 项目。

  1. 切换到 DX 项目所在的目录。
  2. 创建 DX 项目。sf project generate --name MyProject如果你 不要使用标志指定输出目录,项目目录将在当前位置创建。 您还可以使用该标志来 指定在将源同步到组织或从组织同步源时要作为目标的默认包目录。 如果未指示默认包目录,则此命令将创建默认包 目录,force-app。–output-dir–default-package-dir使用该标志指定项目的初始外观。每 模板提供了一个完整的目录结构,消除了猜测 把你的来源。如果选择 , 您的项目包含这些示例配置文件,可帮助您入门。–template–template empty
    • .forceignore
    • config/project-scratch-def.json
    • sfdx-project.json文件
    • package.json
    如果您选择 , 您的 project 还包含这些文件,这些文件在使用 Salesforce 时特别有用 VS Code 的扩展。如果未指定标志,则该命令将使用标准模板。–template standard–templateproject generate
    • .gitignore:使开始使用 Git 版本更容易 控制。
    • .prettierrc 和 .prettierignore:制作 更容易开始使用 Prettier 格式化您的 Aura 组件。
    • .vscode/extensions.json:当 launched,提示您为项目安装推荐的扩展。
    • .vscode/launch.json:配置重播调试器,使其更 可发现且更易于使用。
    • .vscode/settings.json:默认情况下,此文件有一个设置 用于在搜索和快速打开中排除某些文件和文件夹。您可以更改 此值或添加其他设置。
    如果你选择 ,你会得到 所有有用的基本文件和 VS Code 文件。但是默认的包目录包含 更少的目录,例如用于存储 Analytics 模板包的目录。/force-app/main/default/waveTemplates)和其他一些元数据 类型,例如 Apex 类和 LWC 组件。–template analytics

sf project generate --name mywork --template standard
sf project generate --name mywork --default-package-dir myapp-source

后续步骤:

  • (可选)将命名空间注册到 Dev Hub 组织。
  • 配置项目 (sfdx-project.json)。如果使用命名空间, 更新此文件以包含它。
  • 创建一个临时组织定义,以生成具有所需功能的临时组织 为您的项目。新项目的 config 目录包含一个 暂存组织定义文件 (project-scratch-def.json) 示例。

Salesforce DX 项目结构和来源 格式

Salesforce DX 项目具有特定的项目结构和源格式。源 format 使用与元数据 API 使用的文件和文件扩展名不同的一组文件和文件扩展名。 当您使用命令从组织中检索元数据时,Salesforce CLI 会将其以源格式存储在 项目。当您部署元数据时,Salesforce CLI 会将其转换为 元数据 API 需要。

project retrieve start

源转换

元数据格式化的情况并不少见 来源非常大,很难找到你想要的东西。如果你在 与同时更新相同元数据的其他开发人员合作,您拥有 以处理将多个更新合并到文件。如果你认为有 为了更好的方式,你是对的。

之前,所有自定义对象和对象 翻译存储在一个大型元数据文件中。

我们通过提供一种新的源形状来分解这些问题 大型源文件,使其更易于消化,更易于使用版本进行管理 控制系统。它被称为源格式。

Salesforce DX 项目存储 直观子目录中的自定义对象和自定义对象转换。源 格式化使查找要更改或更新的内容变得更加容易。你可以 告别凌乱的合并。

静态资源

静态资源必须位于 /main/default/staticresources 目录中。和命令支持自动扩展或压缩 在项目中存档 MIME 类型。这些行为支持 .zip 和 .jar MIME 类型。这边 源文件可以更轻松地集成到您的 Salesforce DX 项目中,并且 版本控制系统。project deployproject retrieve

例如,如果您上传静态资源存档 通过临时组织的设置 UI,该命令将其扩展为 项目。要从文件系统模拟此过程,请将目录结构添加到 直接压缩到 static resources 目录根目录,然后创建 关联的 .resource-meta.xml 文件。如果存档以 单个文件,则始终将其视为单个文件,而不是 扩大。project retrieve start

此示例说明了不同类型的静态资源是如何 存储在本地项目中。您可以看到名为 expandedzippedresource 的扩展 .zip 存档及其相关的 .resource-meta.xml 文件。您还会看到几个 .jpg 文件与其 MIME 类型一起存储,以及一个 以旧版 .resource 扩展名存储的文件

有关更多信息,请参阅 Salefsorce 帮助:静态资源 信息。

文件扩展名

当您将现有元数据格式转换为源格式时,我们会为 每个位。现在,所有包含 XML 标记的文件都具有 .xml 扩展名,以便 XML 编辑器将它们识别为 XML 文件,您可以查看 他们。要同步本地项目和临时组织,Salesforce DX 项目使用 自定义对象的特定目录结构、自定义对象转换、 Lightning Web 组件、Aura 组件和文档。

例如,如果您有一个名为 Case 的对象,则源格式将提供 XML 版本 称为 Case.object-meta.xml。如果您有一个名为 DreamHouse,我们创建一个名为 DreamHouse.app-meta.xml 的文件。 你明白了。

传统上,静态资源作为二进制对象存储在文件系统上,具有 .resource 扩展名。源格式处理静态资源 通过支持内容 MIME 类型而有所不同。例如,.gif 文件存储为 .gif 而不是 .resource。通过存储带有 MIME 扩展名的文件,您可以 可以使用系统上的相关编辑器管理和编辑文件。

您可以将现有静态资源及其 .resource 扩展名与新创建的静态资源组合在一起 及其 MIME 内容扩展。具有 .resource 扩展名的现有静态资源将保留该扩展名,但任何新的 静态资源以其 MIME 类型扩展名显示在项目中。我们允许 .resource 文件支持现有 客户。虽然您可以获得这种额外的灵活性,但我们建议您存储您的 文件及其 MIME 扩展名。

自定义对象

当您从元数据格式转换为源格式时,您的自定义 对象放置在 <package 中 目录>/main/default/objects 目录。每个对象 具有自己的子目录,用于反映自定义对象的类型。某些部分 自定义对象被提取到以下子目录中:

  • 业务流程
  • 紧凑型布局
  • 领域
  • 字段集
  • 列表视图
  • 记录类型
  • sharing原因
  • validationRules
  • 网页链接

未提取的自定义对象部分放置在 <object>.object-meta.xml 文件中。

自定义对象翻译

自定义对象转换 驻留在<包中 目录>/main/default/objectTranslations 目录, 每个子目录都位于以自定义对象转换命名的子目录中。习惯 对象转换和字段转换被提取到它们自己的文件中 自定义对象转换的目录。

  • 对于字段名称,请<field_name>.fieldTranslation-meta.xml
  • 对于对象名称,请<object_name>.objectTranslation-meta.xml

自定义对象转换中未完成的其余部分 字段翻译放置在名为 <objectTranslation>.objectTranslation-meta.xml 的文件中。

请参阅 Salesforce 帮助:Translation Workbench 更多信息。

Aura 组件

Aura 捆绑包和组件必须位于 <package 下名为 aura 的目录 目录>目录。

Lightning Web 组件

Lightning Web 组件必须位于 <package 下名为 lwc 的目录 目录>目录。

适用于 Lightning 社区的 ExperienceBundle

ExperienceBundle 元数据类型必须位于 <package 下名为 experiences 的目录中 目录>目录。experiences 目录包含每个 Lightning 的文件夹 组织中的社区。请参阅 Experience Cloud 开发人员指南 详。

文件

文档必须位于其父级的目录中 文档文件夹。父文档文件夹必须位于名为 documents 的目录中。每个文档都有相应的元数据 XML 可以使用 XML 编辑器查看的文件。

自定义标签

所有自定义标签都包含在一个名为 <package 的文件中,该文件位于 package 下名为 labels 的目录中 目录>目录。每个包目录都可以 有自己的文件。CustomLabels.labels-meta.xmlCustomLabels.labels-meta.xml

如何在同步时排除源

在本地文件系统和目标组织之间同步元数据时,您通常会有 要排除的源文件。同样,您经常希望在以下情况下排除某些文件 将源转换为 Salesforce DX 源格式。在这两种情况下,您都可以排除个人 文件或特定目录中带有文件的所有文件。

.forceignore

该文件在运行时排除大多数文件 的命令,例如 、 、 和 。.forceignoreprojectproject deploy startproject retrieve startproject convert sourceproject delete source

.forceignore 文件的结构

文件结构模仿该结构。中的每一行都指定一个模式,该模式对应于一个或 更多文件。这些文件通常表示元数据组件,但也可以是所需的任何文件 排除,例如 LWC 配置 JSON 文件或测试。.forceignore.gitignore.forceignore

这些命令在分析文件时,使用与文件相同的规则和模式。这些规则的几个常见示例 模式包括:project.forceignore.gitignore

  • 始终使用正斜杠 () 作为目录 分隔符,即使在使用反斜杠的操作系统(如 Microsoft Windows)上也是如此。/
  • 星号 () 匹配除 forward 以外的任何内容 斜杠 ()。*/
  • 模式中两个连续的星号 () 有 特殊含义,具体取决于它们在路径名中的位置。有关示例,请参阅。**
  • 为了便于阅读,请在文件中使用空行作为分隔符。.forceignore

还有更多的规则和模式。查看 git 文档了解详细信息。

确定元数据组件的确切文件名

在构建文件时,有时 需要要排除的元数据组件的确切名称。最简单的方法 确定特定组件的名称是要查看包目录 包含源文件,例如默认目录。.forceignoreforce-app

例如,配置文件元数据组件位于目录中。假设该目录包含 源文件 。指定 命令排除此组件,添加 此条目到您的:main/default/profilesNotUsedProfile.profile-meta.xmlproject.forceignore

**/NotUsedProfile.profile-meta.xml

确定元数据组件确切名称的另一种方法是查看 如果您也使用 source 的命令 跟踪。例如,如果您有本地或远程更改,请运行 or 命令以显示已更改组件的完整路径名。 此输出显示权限集的文件名和路径中的自定义选项卡 “将部署”部分的列:projectproject deploy previewproject retrieve previewDreamhouseSettings

sf project deploy preview

Will Deploy [2] files.
 Type          Fullname   Path                                                                    
 ───────────── ────────── ─────────────────────────────────────────────────────────────────────── 
 PermissionSet dreamhouse force-app/main/default/permissionsets/dreamhouse.permissionset-meta.xml 
 CustomTab     Settings   force-app/main/default/tabs/Settings.tab-meta.xml

源命令忽略的其他文件

源命令会忽略这些文件,即使它们不包含在文件中:.forceignore

  • 任何以“点”开头的源文件或目录,例如 .DS_Store 或 .sf
  • 任何以 .dup 结尾的文件
  • package2-descriptor.json
  • package2-manifest.json文件

排除尚未与本地源同步的远程更改

有时,您直接在组织中进行更改,但您不想将该更改拉入 您当地的 DX 项目。若要排除远程元数据更改,请向其添加一个条目,该条目表示 如果您确实检索了它,则会创建它。.forceignore

例如,如果您有一个名为 add this entry to 的权限集:Dreamhouse,.forceignore

**/Dreamhouse.permissionset-meta.xml

排除 MetadataWithContent 类型

包含内容的元数据组件(如 ApexClass 或 EmailTemplate)扩展了 MetadataWithContent 类型。这些组件有两个 源文件:一个用于内容本身,例如 Apex 代码或电子邮件模板,以及 随附的元数据文件。例如,HelloWorld Apex 类的源文件是 和 。HelloWorld.clsHelloWorld.cls-meta.xml若要排除 MetadataWithContent 组件(如 ApexClass),请同时列出两个源 文件,或使用星号。为 例:

.forceignore

# Explicilty list the HelloWorld source files to be excluded
helloWorld/main/default/classes/HelloWorld.cls
helloWorld/main/default/classes/HelloWorld.cls-meta.xml

# Exclude the HelloWorld Apex class using an asterisk
helloWorld/main/default/classes/HelloWorld.cls*

排除捆绑包和文件组

使用两个连续的星号 () 忽略文件 分布在多个目录中,只有一个条目。**.forceignore

例如,要排除与名为 的 Lightning Web 组件相关的所有资源文件,请添加此条目以排除整个 组件包:myLwcComponent

**/lwc/myLwcComponent

要排除所有 Apex 类,请执行以下操作:

**/classes

包含特殊字符的元数据

如果元数据名称包含特殊字符(例如正斜杠、反斜杠或 引号),我们将本地文件系统上的文件名编码为所有操作 系统。例如,如果您检索名为 Custom: Marketing Profile 的自定义配置文件,则 冒号在生成的文件名中编码。

自定义%3A 营销配置文件.profile-meta.xml

如果在 .forceignore 中引用带有特殊字符的文件名, 使用编码的文件名。

将 .forceignore 放在哪里

确保您指定的路径是 相对于包含文件的目录。为了让文件发挥其魔力,您 必须将其放在正确的位置,具体取决于您正在运行的命令。.forceignore.forceignore.forceignore

  • 将文件添加到 源跟踪项目 命令。.forceignoreproject
  • 将文件添加到 的元数据检索目录(使用 )中。package.xmlproject convert mdapi

示例语法

以下是一些用于指示要排除的来源的选项。在此示例中,所有路径 相对于项目根目录。

# Specify a relative path to a directory from the project root
helloWorld/main/default/classes

# Specify a wildcard directory - any directory named “classes” is excluded
**classes

# Specify file extensions
**.cls*
**.pdf

# Specify a specific file
helloWorld/main/default/HelloWorld.cls*

列出当前被忽略的文件和目录

使用命令列出文件 以及命令当前忽略的项目中的目录。该命令引用文件以确定忽略的文件列表。project list ignoredprojectproject list ignored.forceignore

若要列出所有包目录中被忽略的所有文件,请运行命令而不 任何标志。使用标志限制检查 复制到特定文件或目录。如果指定目录,该命令将检查所有 子目录递归。–source-dir

此示例检查是否忽略了特定文件。

sf project list ignored --source-dir package.xml

此示例获取特定目录中所有被忽略文件的列表。

sf project list ignored --source-dir force-app/main/default

命令找到被忽略的文件时的示例输出:

Found the following ignored files:
force-app/main/default/aura/.eslintrc.json
force-app/main/default/lwc/.eslintrc.json
force-app/main/default/lwc/jsconfig.json

未忽略文件时的示例输出:

No ignored files found in paths:
README.md

从现有源创建 Salesforce DX 项目

如果您是 Salesforce 开发人员、合作伙伴或 ISV,您可能在 打包组织中的托管包或沙盒或生产组织中的应用程序源。 在开始使用 Salesforce DX 之前,请将现有源检索到 Salesforce DX 中 项目。

  1. 创建 Salesforce DX 项目。sf project generate --name MyProject
  2. 切换到项目目录。cd MyProject
  3. 通过运行项目检索来检索源 start 命令。当前源的位置和格式决定了命令 必须使用的标志。当前源的格式和位置用于检索源的命令你是合作伙伴,已将源定义为托管包,而 包装组织。sf project retrieve start --package-name <package-name> --target-org <sourceOrg-username-or-alias>该标志指定用户名或 要从中检索源的源组织(例如打包组织)的别名。 该标志指定包名称;如果 名称包含一个空格,用双引号括起来。–target-org–package-name默认情况下,该命令会创建一个包目录,其名称与包相同。 在 DX 项目目录中。然后,该命令从包中检索源,然后 使用标准的 DX 源格式结构将其组织在新目录中。使用 指定其他目录;这 命令创建该目录(如果该目录不存在)。–output-dir您有一个清单文件,通常称为 package.xml,它 在沙盒或生产组织中定义未打包的源。sf project retrieve start --manifest <manifest-file> --target-org <sourceOrg-username-or-alias>该标志指定用户名或 要从中检索的组织(例如沙盒或生产)的别名 源。该标志指示 清单文件,通常称为 .–target-org–manifestpackage.xml默认情况下,该命令将源代码检索到 DX 项目的现有包目录中 使用 指定不同的目录;这 命令创建该目录(如果该目录不存在)。force-app–output-dir提示如果您已经有一个存储库,该存储库遵循从 元数据 API 检索,则存储库中的源文件采用元数据格式。您可以 将这些文件转换为源格式,并将它们包含在您的 Salesforce DX 项目中。有关详细信息,请参阅将元数据格式的文件转换为源格式。
  4. 如果检索在项目中创建了包目录,请将其添加到 sfdx-project.json 文件中。

您是否在沙盒或生产组织中有源代码,但没有清单文件 (package.xml)将其检索到您的项目?使用 CLI 命令创建一个。例如 此命令从组织中的元数据组件生成别名为 的清单。

project generate manifestprod-org

sf project generate manifest --from-org prod-org

看 命令帮助以获取更多示例和 信息。

sf project generate manifest --help

你 也可以参考元数据中的示例包 .xml 清单文件 API 开发人员指南。

将元数据格式的文件转换为源格式

如果您已经有一个存储库,其中您已使用 元数据 API,文件为元数据格式。您可以将这些文件转换为源文件 格式化并将它们添加到您的 Salesforce DX 项目中。然后,您可以将它们部署并检索到 和 使用 CLI 命令从您的组织,并使用源跟踪来跟踪更改。

convert 命令将忽略所有以“点”开头的文件,例如 .DS_Store。若要从转换过程中排除更多文件,请添加 .forceignore 文件。

  1. 切换到您的 Salesforce DX 项目目录。
  2. 使用 project convert mdapi 命令将文件从元数据格式转换为源格式。假设您的元数据格式 文件位于名为 /Users/testing/mdapi_project 的目录中。sf project convert mdapi --root-dir /Users/testing/mdapi_project标志是目录的名称 包含元数据格式文件。–root-dir转换后的源代码存储在 sfdx-project.json 文件中指示的默认包目录中,通常命名为 。使用标志将转换后的文件放在不同的包目录中;这 命令创建该目录(如果该目录不存在)。force-app–output-dir
  3. 如果转换在项目中创建了包目录,请将其添加到 sfdx-project.json 文件中。

Salesforce DX 用户名和组织

许多 Salesforce CLI 命令连接到组织以完成其任务。例如,创建临时组织的命令, 连接到 Dev Hub 组织。和命令同步源代码 在您的项目和组织之间。在每种情况下,CLI 命令都需要用户名来确定 要连接到哪个组织。用户名在整个 Salesforce 生态系统中是唯一的,并且是 仅与一个组织关联。

org create scratchproject deploy startproject retrieve start

创建临时组织时,CLI 会生成一个用户名。用户名看起来像一封电子邮件 地址,例如 test-wvkpnfm5z113@example.com。您不需要密码即可连接到或 打开一个临时组织,但您可以稍后使用该命令生成一个组织。org generate password

Salesforce 建议您将在开发期间最常连接到的组织设置为 您的默认组织。最简单的设置方法是登录到 Dev Hub 组织或创建 划痕组织;您还可以使用 config 命令。分别指定 or 标志。您还可以创建一个别名,使组织的 用户名更具可读性和直观性。您可以互换使用用户名或其别名 用于连接到组织的所有 CLI 命令。–set-default-dev-hub–set-default

这些示例在您登录并授权组织时设置默认组织和别名,在此 案例为 Dev Hub 组织,然后在创建临时组织时。

sf org login web --set-default-dev-hub --alias my-hub-org
sf org create scratch --definition-file config/project-scratch-def.json --set-default --alias my-scratch-org

要验证 CLI 命令是否需要组织连接,请查看带有标志的标志列表。具有该标志的命令连接到开发人员中心组织。同样地 已连接到临时组织的命令, 沙箱等。本示例显示有关 的标志列表和帮助信息。-h–target-dev-hub–target-orgorg create scratch

sf org create scratch -h

当您运行需要组织连接且未指定用户名的 CLI 命令时, 该命令使用默认值。若要显示已授权或创建的所有组织,请运行组织列表。默认的 Dev Hub 和临时组织 左侧标有表情符号;请参阅显示屏末尾的图例 详。

让我们来看看几个例子。此示例将源代码部署到您设置的组织 作为默认值。

sf project deploy start

要指定缺省组织以外的组织,请使用 。例如,假设您创建了一个别名为 的临时组织。这不是默认的,而是你 仍然想将源部署到它。–target-orgmy-other-scratch-org

sf project deploy start --target-org my-other-scratch-org

此示例演示如何使用标志 以在创建临时组织时指定非默认的 Dev Hub 组织。–target-dev-hub

sf org create scratch --target-dev-hub jdoe@mydevhub.com --definition-file my-org-def.json --alias yet-another-scratch-org

有关设置默认组织的详细信息

如果您已经创建了临时组织,则可以将其或任何其他组织设置为默认组织 通过从项目运行命令 目录。config set

sf config set target-org test-wvkpnfm5z113@example.com

该命令在本地设置值,因此它仅适用于当前项目。要使用 默认组织 对于计算机上的所有项目,请指定标志。您可以从任何目录运行此命令。本地项目 默认值覆盖全局默认值。–global

sf config set target-org test-wvkpnfm5z113@example.com --global

该过程类似于设置默认的 Dev Hub 组织,只是你使用 config 变量。target-dev-hub

sf config set target-dev-hub jdoe@mydevhub.com

要取消设置配置变量,请运行以下命令。使用该标志为所有人取消设置 您的 Salesforce DX 项目。config unset–global

sf config unset target-org --global

要查看您设置的所有配置变量,请运行 ;如果从项目目录运行它,它还会列出本地目录。config list

sf config list

有关锯齿的更多信息

使用该命令为 您已经创建的临时组织,或您授权后的任何组织。您可以创建一个 任何组织的别名:Dev Hub、临时组织、生产、沙盒等。因此,当您发出 命令需要组织的用户名,使用易于记忆的别名可以加快速度。alias set

sf alias set my-scratch-org test-wvkpnfm5z113@example.com

别名还使设置默认组织变得容易。当您使用别名而不是 实际用户名。config settarget-org

sf config set target-org my-scratch-org

通过用空格分隔名称-值对,使用单个命令设置多个别名; 在这种情况下,您必须使用等号。

sf alias set org1=<username> org2=<username>

一次只能将一个别名与一个用户名关联。如果多次设置, 别名指向最新的用户名。例如,如果运行以下两个 命令,别名 my-org 设置为 test-wvkpnfm5z113@example.com。

sf alias set my-org test-blahdiblah@example.com
sf alias set my-org test-wvkpnfm5z113@example.com

若要查看已设置的所有别名,请使用以下命令之一。

sf alias list
sf org list

要删除别名,请使用以下命令。alias unset

sf alias unset my-org

列出您的所有组织

使用命令显示用户名和 您已授权的组织和您创建的活动临时组织的别名。org list

sf org list

    Type    Alias          Username                                      Org ID             Status                Expires
 ── ─────── ────────────── ───────────────────────────────────────────── ────────────────── ───────────────────── ──────────
 D DevHub  JulesDevHub    jules@sf.com                                  00DB0001234c7jiMAA Connected 
   Sandbox                jules@sf.com.jssandtwo                        00D020012344XTiEAM Connected
 O Scratch my-scratch-org test-qjrr9q5d13o8@example.com                 00DMN0012342Gez2AE Active                2023-08-21    

Legend:  D=Default DevHub, O=Default Org      Use --all to see expired and deleted scratch orgs

输出列出了已授权或创建的组织,包括开发人员中心组织、 生产组织、临时组织和沙盒。该表显示您的用户名 指定了您何时授权组织、其别名、其 ID 以及 CLI 是否可以 连接到它。左侧的表情符号指向默认组织或 Dev Hub;请参阅 图例在底部了解详情。临时组织还会显示其到期日期。

要查看更多信息,例如临时组织创建日期和关联的 DevHub 组织, 和所有组织的实例 URL,请使用该标志。–verbose

sf org list --verbose

使用该标志删除非活动暂存组织 从列表中。该命令在执行任何操作之前会提示您。–clean

sf org list --clean

将命名空间链接到 Dev Hub 组织

要将命名空间与临时组织一起使用,必须链接 Developer Edition 组织,其中 命名空间已注册到 Dev Hub 组织。

在链接命名空间之前,请完成这些任务。

  • 如果您没有具有已注册命名空间的组织,请创建一个 Developer Edition 组织,该组织是 独立于 Dev Hub 或临时组织。如果您已经有一个组织,并且注册了 命名空间,你就可以开始了。
  • 在 Developer Edition 组织中,创建并注册命名空间。重要请仔细选择命名空间。如果您正在试用此功能或需要 出于测试目的,请选择一次性命名空间。不要选择要使用的命名空间 将来用于生产组织或其他一些实际用例。关联 命名空间,则无法更改或重用它。
  1. 以系统管理员或 Salesforce DX 用户身份登录 Dev Hub 组织 命名空间注册表权限。提示确保浏览器允许来自开发人员中心组织的弹出窗口。
    1. 从“应用程序启动器”菜单中,选择“命名空间注册表”。
    2. 单击“链接命名空间”。
  2. 在弹出的窗口中,登录到您的命名空间所在的 Developer Edition 组织 使用组织的系统管理员凭据进行注册。您无法链接没有命名空间的组织:沙箱、临时组织、补丁组织和分支 组织需要将命名空间链接到命名空间注册表。

若要查看链接到命名空间注册表的所有命名空间,请选择“全部” 命名空间注册表列表视图。

Salesforce DX 项目配置

项目配置文件 sfdx-project.json 指示该目录是 Salesforce DX 项目。配置文件包含项目 信息,并促进组织的授权和第二代的创建 包。它还告诉 Salesforce CLI 在项目和 组织。

我们在 使用 Salesforce CLI 或 Salesforce Extensions for VS Code 创建项目的示例存储库。

注意

是否打算创建第二代软件包?准备就绪后,添加 特定于打包的配置选项,用于支持包创建。请参阅项目配置文件以获取 第二代托管软件包。

我们建议您使用源签入此文件。

{ 
"packageDirectories" : [ 
    { "path": "force-app", "default": true}, 
    { "path" : "unpackaged" }, 
    { "path" : "utils" } 
  ],
"namespace": "", 
"sfdcLoginUrl" : "https://login.salesforce.com", 
"sourceApiVersion": "58.0"
}

您可以手动编辑这些参数。名称(Salesforce Functions 需要)

Salesforce DX 或 Salesforce Functions 项目名称。namespace(可选)

与包一起使用的全局命名空间。命名空间必须注册到 与开发人员中心组织关联的组织。此命名空间分配给暂存 使用该命令创建的组织。 如果要创建未锁定的包,则可以选择创建没有 命名空间。org create scratch

重要

向 Salesforce 注册命名空间,然后连接组织 替换为已注册的命名空间到 Dev Hub 组织。oauthLocalPort(可选)默认情况下,OAuth 端口为 1717。如果 1717 已在使用中,并且您 计划在开发人员中心组织中创建连接的应用,以支持基于 JWT 的授权。是 确保还按照在组织中创建连接的应用程序中的步骤更改回调 网址。packageAliases(可选)

程序包 ID 的别名,通常可能很隐晦。请参阅项目配置文件以获取 第二代托管包了解详细信息。packageDirectories (必需)

包目录指示将源同步到和 来自组织。这些目录可以包含来自托管或非托管的源文件 包。它们还可以包含由蚂蚁生成的未打包源文件 工具或更改集。有关所有选项的信息,请参阅 项目配置文件 第二代托管软件包。packageDirectories

使用包目录时,请记住这些事项。

  • 包目录的位置是相对于项目的位置。不要指定 绝对路径。以下两个示例是等效的。"path": "helloWorld" "path" : "./helloWorld"
  • 只能有一个默认路径(包目录)。如果只有一条路径, 我们假设它是默认值,因此您不必显式设置参数。如果有多个路径,则必须 指示哪一个是默认值。default
  • Salesforce CLI 在以下情况下使用默认包目录作为目标目录 从组织检索到本地项目的更改。也使用此默认路径 创建第二代软件包时。
  • 如果未指定输出目录,则默认包目录也是 在源转换期间存储文件的位置。源转换均来自 元数据格式到源格式,以及从源格式到元数据格式。

plugins(可选)

要使用您创建的自定义插件,请使用 Salesforce DX 项目,请向 sfdx-project.json 文件添加一个部分。在本节中,添加配置值 和设置来更改插件的行为。plugins

"plugins": {
  "yourPluginName": {
    "timeOutValue": "2"
  },
  "yourOtherPluginName": {
    "yourCustomProperty": true
  }
}

仅存储要签入到源的值的配置变量 对项目的控制。这些配置值会影响整个开发 团队。pushPackageDirectoriesSequentially (可选) (已弃用)

注意

此属性已弃用,仅适用于不推荐使用的命令。它不会影响行为 的命令。部署 按特定顺序打包,按所需顺序使用单独的命令。force:source:pushproject deploy startproject deploy start设置为推送多个包目录 按照使用 时列出的顺序排列。这些目录是 推送单独的事务。此属性的默认值为 ,这意味着多个包目录是 部署在单个事务中,不考虑顺序。例:

truepackageDirectoriesforce:source:pushfalse

"packageDirectories": [
    {
      "path": "es-base-custom",
      "default": true
    },
    {
      "path": "es-base-ext"
    }
  ],
  "pushPackageDirectoriesSequentially": true,

更换件(可选)

自动将元数据源文件中的字符串替换为特定值 在将文件部署到组织之前。

请参阅之前替换代码中的字符串 部署了解详细信息。sfdcLoginUrl(可选)

命令使用的登录 URL。如果 未指定,默认值为 https://login.salesforce.com。如果需要用户,请覆盖默认值 授权给特定的 Salesforce 实例。例如,如果要授权 进入沙盒组织,将此参数设置为 。org loginhttps://test.salesforce.com

如果未在此处指定默认登录 URL,或者在项目外部运行,请指定实例 URL 使用标志授权组织时。org login–instance-urlsourceApiVersion(可选)

源兼容的 API 版本。默认值为与 Salesforce CLI。

该值确定字段 在 、 或 期间为每种元数据类型检索。如果您使用 在最新版本中已更改的元数据类型。您需要指定版本 的元数据源。例如,假设向 CustomTab 添加了一个新字段 适用于 API 版本 58.0。如果检索版本 57.0 或更早版本的组件,则会看到 运行命令时出错,因为 组件不包含该字段。sourceApiVersionproject deployproject retrieveproject convertproject

不要将此项目配置参数与 org-api-version CLI 混淆 配置变量,该变量具有相似的名称。请参阅 API 版本和源 API 版本的工作原理 Salesforce CLI 了解更多信息。

多个包目录

创建 Salesforce DX 项目时,我们建议您组织元数据 通过在本地创建多个包目录,将其组合到逻辑分组中。然后定义这些 文件中的目录。您可以分组 应用程序或自定义项的类似代码和源代码,以更好地组织团队的 存储 库。稍后,如果您决定使用第二代软件包 (2GP),则这些目录 对应实际的 2GP 包。

sfdx-project.json

注意

为清楚起见,包目录是指包含 分解的元数据文件,即源格式的元数据。此目录并不总是 结果为 2GP 包。封装是指 2GP 封装。

在文件中,列出每个包 目录。 每个本地包目录都遵循标准的 Salesforce DX 项目结构。sfdx-project.jsonpackageDirectories

多包目录结构仅是客户端(本地)的。当您部署 源到组织,没有 其本地包目录位置与组织中的包之间的关联。你 通过显式安装 2GP封装。project deploy start

部署、检索和 转换元数据支持多个包目录。project

如何设置?

设置多个包目录很容易。 如何在这些目录中组织本地源代码需要更多的思考和 规划,并取决于您的开发环境。计划如何组织代码 你开始吧。随着项目的发展,保持源代码井井有条 让您的开发人员更轻松、更高效地工作。

假设你把 默认包目录中自定义对象 MyObject 的分解元数据文件。你 然后,可以将 MyObject 上的新字段 MyField 的文件放在不同的“扩展”包中 目录中,而不必同时包含 MyObject 文件。虽然这很简单 例如,您可以采用任意数量的不同方式组织代码。这些博客文章提供了一些想法。

这是 如何设置多个包目录。让我们先看一个示例片段:sfdx-project.json

"packageDirectories": [
    {
      "path": "es-base-custom",
      "default": true
    },
    {
      "path": "es-base-ext"
    },
    {
      "path": "es-base-styles"
    }
  ],

示例代码段定义了三个 软件包目录:(缺省值)、和 。假设您的顶级本地项目目录称为 。下面的目录层次结构 它看起来像这样:sfdx-project.jsones-base-customes-base-extes-base-styleseasy-spaces-lwc

每个目录都符合标准 Salesforce DX 项目结构。例如,该目录如下所示:es-base-*es-base-ext

现在,将分解的元数据源添加到这些多个包目录中 最适合您的开发环境。

它是如何工作的?

让我们通过几个例子来了解如何使用 多个包目录。project deploy startproject retrieve start

对于新组织,命令 在文件中列出的所有多个包目录中部署所有元数据。之后,该命令仅部署 新建、更改或标记为删除的元数据。默认情况下,该命令将部署 单个事务中的元数据,就好像您只有一个包目录一样。default project deploy startsfdx-project.json

sf project deploy start --target-org my-org

还可以将要部署的元数据作为目标。可以部署特定包 目录、特定元数据组件、清单文件中列出的组件等。 此示例在包目录中部署元数据:es-base-custom

sf project deploy start --source-dir es-base-custom --target-org my-org

此示例部署在所有多个包目录中找到的所有 Apex 类:

sf project deploy start --metadata ApexClass --target-org my-org

运行 时,命令 将组织中的所有远程更改检索到本地项目中。对于每个检索到的 组件,该命令将在所有软件包目录中查找本地匹配项。如果它发现一个 match,命令会更新它。如果找不到匹配项,该命令将复制本地 组件添加到默认包目录中,在我们的示例中是 .project retrieve startes-base-custom

sf project retrieve start --target-org my-org

然后,您可以将检索到的文件移动到对您有意义的包目录中 项目。使用 将移动的文件部署回组织后,Salesforce CLI 会跟踪其新位置。project deploy start

您还可以用于检索 来自组织的目标元数据。现有元数据将检索到其正确的本地 package 目录和新的元数据放入默认的 package 目录。这个例子 仅检索本地包目录中包含的元数据组件:project retrieve startes-base-custom

sf project retrieve start --source-dir es-base-custom  --target-org my-org

此示例从您的组织中检索所有 Apex 类;新类进入默认值 包目录和本地存在的类进入其对应的包中 目录。

sf project retrieve start --metadata ApexClass --target-org my-org

按顺序推送源

默认情况下,将元数据部署到 您的组织在单个事务中,无论您列出多个事务的顺序如何 中的包目录。但有时 您必须指定推送包目录的确切顺序。原因 包括:project deploy startsfdx-project.json

  • 本地项目中重构的元数据组件文件的数量超过 Salesforce 元数据限制为每次检索或部署 10,000 个文件。一种解决方法是 将元数据拆分为多个包目录,每个目录包含的量小于此值 按顺序限制和推送每个目录,从而单独限制和推送。
  • 多个包目录之间存在依赖关系,这要求它们 按特定顺序推送。
  • 多个包目录包含相同的元数据组件,并且您希望 指定最后部署的那个,这样它就不会被覆盖。

如果需要按特定顺序进行多个部署,请使用 or 标志在 所需的顺序。project deploy start–source-dir–metadata

在部署之前替换代码中的字符串

自动将元数据源文件中的字符串替换为特定值 在将文件部署到组织之前。

以下示例用例描述了使用部署前字符串替换的方案:

  • NamedCredential 包含用于测试的终结点。但是当你部署 source 添加到您的生产组织,您需要指定不同的终端节点。
  • ExternalDataSource 包含您不想存储在存储库中的密码。 但是,您需要将密码与元数据一起部署。
  • 您将几乎相同的代码部署到多个组织。你想有条件地换掉一些 值取决于要部署到的组织。

当源格式的文件转换为 ZIP 文件时,会发生字符串替换 使用命令部署到组织。字符串替换导致的更改永远不会写入您的项目; 它们仅适用于已部署的文件。project deploy start

配置字符串替换

通过向文件添加属性来配置字符串替换。该物业 接受多个条目,这些条目由定义以下项的键组成:replacementssfdx-project.json

  • 包含要替换的字符串的源文件。
  • 要替换的字符串。
  • 替换值。

让我们看一个例子,看看它是如何工作的;请参阅本主题后面的更多示例。这 sample 指定当文件 deployed,则字符串的所有匹配项都是 替换为THE_REPLACEMENT环境的值 变量:

sfdx-project.jsonforce-app/main/default/classes/myClass.clsreplaceMe

{
  "packageDirectories": [
     {
       "path": "force-app",
       "default": true
     }
  ],
  "name": "myproj",
  "replacements": [
    {
      "filename": "force-app/main/default/classes/myClass.cls",
      "stringToReplace": "replaceMe",
      "replaceWithEnv": "THE_REPLACEMENT"  
    }
  ]
}

可以在属性中指定这些键。replacements文件的位置以下属性之一是必需的:

  • filename:包含 要替换的字符串。
  • glob:包含 要替换的字符串。例:。**/classes/*.cls

要替换的字符串以下属性之一是必需的:

  • stringToReplace:要 取代。
  • regexToReplace:正则表达式(正则表达式) 指定要替换的字符串模式。

重置价值以下属性之一是必需的:

  • replaceWithEnv:指定字符串为 替换为指定环境变量的值。
  • replaceWithFile:指定字符串为 替换为指定文件的内容。

条件处理这些属性是可选的:

  • replaceWhenEnv:指定字符串 仅当特定环境变量设置为特定 价值。使用该属性指定 环境变量和属性 指定触发字符串替换的值。envvalue
  • allowUnsetEnvVariable:使用的布尔属性 与属性。当设置为 时,指定如果未设置环境变量,则 在部署之前,从文件中删除替换字符串。换言之, 用什么都没有替换它。当设置为 ( 默认值),如果未设置环境变量,则会出现错误。replaceWithEnvtruereplaceWithEnvfalsereplaceWithEnv

请遵循以下语法规则:

  • 始终对目录使用正斜杠 (), 即使在 Windows 上。/
  • JSON 和正则表达式都使用反斜杠 () 作为转义字符。因此,当您使用正则表达式 匹配一个点,这需要转义,你必须对值使用两个反斜杠:\regexToReplace"regexToReplace" : "\\."同样地 若要匹配单个反斜杠,必须指定其中的三个。"regexToReplace" : "\\\"

例子

此示例与上一个示例类似,但显示了如何 为两个配置字符串替换 文件:

"replacements": [
  {
    "filename": "force-app/main/default/classes/FirstApexClass.cls",
    "stringToReplace": "replaceMe",
    "replaceWithEnv": "THE_REPLACEMENT"
  },
  {
    "filename": "force-app/main/default/classes/SecondApexClass.cls",
    "stringToReplace": "replaceMe",
    "replaceWithEnv": "THE_REPLACEMENT"
  }
]

此示例演示如何指定仅进行字符串替换 如果存在名为 DEPLOY_DESTINATION 的环境变量,并且其值为 。PROD

"replacements": [
  {
    "filename": "force-app/main/default/classes/myClass.cls",
    "stringToReplace": "replaceMe",
    "replaceWithEnv": "THE_REPLACEMENT",
    "replaceWhenEnv": [{
      "env": "DEPLOY_DESTINATION",
      "value": "PROD"
    }]  
  }
]

在此示例中,如果未设置环境变量 SOME_ENV_THAT_CAN_BE_BLANK,则在部署文件时将删除文件中的字符串。如果环境 变量设置为一个值,然后该值将替换字符串。myNS__myClass.clsmyNS__

"replacements": [
    {
      "filename": "/force-app/main/default/classes/myClass.cls",
      "stringToReplace": "myNS__",
      "replaceWithEnv": "SOME_ENV_THAT_CAN_BE_BLANK",
      "allowUnsetEnvVariable": true
    }
  ]

此示例指定,当部署目录中的 Apex 类文件时,所有 字符串的匹配项替换为 文件的内容。force-app/main/defaultreplaceMereplacementFiles/copyright.txt

"replacements": [
  {
    "glob": "force-app/main/default/classes/*.cls",
    "stringToReplace": "replaceMe",
    "replaceWithFile": "replacementFiles/copyright.txt"
  }
]

使用正则表达式指定文本的搜索模式,而不是文本的搜索模式。为 例如,Apex 类 XML 文件始终包含指定 Salesforce API 版本的元素,如 这个片段。

<apiVersion>

<?xml version="1.0" encoding="UTF-8" ?>
<ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>55.0</apiVersion>
    <status>Active</status>
</ApexClass>

假设您想在最近的 Apex 类上测试您的 Apex 类 API 版本,然后再实际更新所有类。此示例演示如何使用 用于搜索元素的正则表达式。在部署时,该元素将替换为一个特定的字符串,例如 ,该字符串包含在 文件。

<apiVersion><apiVersion>58.0</apiVersion>replacementFiles/latest-api-version.txt

"replacements": [
  {
    "glob": "force-app/main/default/classes/*.xml",
    "regexToReplace": "<apiVersion>\\d+\\.0</apiVersion>",
    "replaceWithFile": "replacementFiles/latest-api-version.txt"
  }
]

测试字符串替换

按照以下步骤测试字符串替换,而无需实际将文件部署到 组织。

  1. 将环境变量设置为 。SF_APPLY_REPLACEMENTS_ON_CONVERTtrue
  2. 运行命令,该命令 将源文件转换为元数据 API 格式。为 例:project convert sourcesf project convert source --output-dir mdapiOut --source-dir force-app
  3. 检查输出目录中的文件(在我们的示例中为字符串替换),以及将部署到 组织。mdapiOut

警告

将密码或机密写入文件系统时要小心,同时 测试。此外,请务必重置您在测试期间设置的任何环境变量,以便它们 以后不会意外应用。

技巧和窍门

  • (仅限 macOS 或 Linux)使用 or 属性时,可以指定 环境变量应用于单个命令,方法是在 命令执行。为 例:replaceWithEnvreplaceWhenEnvTHE_REPLACEMENT="some text" DEPLOY_DESTINATION=PROD sf project deploy start警告以这种方式设置密码或密码时要小心,因为它们会显示 在您的终端历史记录中。
  • 如果您配置了许多字符串替换,并且发现它难以管理, 查看开源工具,这些工具将一个或多个文件的内容加载到 环境,例如 dotenv-cli。在此示例中,环境变量在 在命令执行之前加载两个本地文件:.envproject deploy startdotenv -e .env1 -e .env2 sf project deploy start警告不要在文件中提交密码或机密。.env
  • 如果指定 ,则 JSON 输出将包含一个属性,该属性列出了受影响的文件和 已替换的字符串。如果指定 and ,则 JSON 输出不包括该属性。–jsonproject deploy startreplacements–json–concisereplacements查看字符串 替换信息,请指定 。project deploy start–verbose

注意事项和限制

  • 如果在多个文件中配置多个字符串替换,则 部署可能会降级。如果可能,请考虑使用密钥,以确保只打开一个文件。如果必须使用 ,请尝试限制 打开的文件数 指定单个目录或元数据类型。filenameglob例如,目标 特定目录中的 Apex 类文件,这比 搜索所有 Apex 的 要好。 所有包目录中的元数据文件。“glob”: “force-app/main/default/classes/*.cls”“glob”: “**/classes/**”
  • 在静态资源中使用字符串替换时要小心。不做字符串时 替换,Salesforce CLI 在第一次遇到时只是压缩所有静态资源 他们的目录并按原样部署它们。如果为大 静态资源目录,CLI 必须检查比平时多得多的文件,这可以 降低性能。
  • 在以元数据格式进行部署时,不能使用字符串替换,例如使用 命令。project deploy start –metadata-dir
  • 如果部署超时,或者您指定了 的标志 和 然后运行或查看发生了什么,部署 文件像往常一样包含字符串替换。但是,和的输出不会显示与应有的字符串替换信息相同的字符串替换信息。–asyncproject deploy startproject deploy resumeproject deploy reportproject deploy resumeproject deploy reportproject deploy start –verbose