开始使用 Lightning Web Components — Salesforce LWC 入门指南

全面介绍 Lightning Web Components(LWC)框架。涵盖 LWC 核心概念、标准 JavaScript 和 HTML、Web Components 标准、向后兼容性、Lightning 组件库、LWS/Locker 安全机制、创建第一个组件、LWC 开源生态、API 版本管理、支持的浏览器和 JavaScript,以及支持的 Salesforce 目标和 API。帮助你快速上手 Salesforce 平台上的现代 UI 开发。...

📅 2026/7/19 ✍️ ponybai 🏷️ lwc, salesforce, frontend
开始使用 Lightning Web Components

什么是 Lightning Web Components?

LWC 框架概述

Lightning Web Components(LWC)是一个用于构建自定义用户界面、Web 和移动应用以及数字体验的现代框架,运行于 Salesforce 平台之上。Lightning Web Components 是使用标准 HTML 和 JavaScript 构建的自定义 HTML 元素。Salesforce 提供了基于 Lightning Design System 构建的 Lightning 基础组件,作为构建自定义体验的预制模块。使用基础组件可以为你的用户提供一致的外观和体验,同时简化你的开发工作。

可用版本:适用于 Lightning Experience,支持 EnterprisePerformanceUnlimitedDeveloper 版本。

编写标准 JavaScript 和 HTML

标准 JavaScript 和 Web Components

Lightning Web Components 使用核心 Web Components 标准,仅提供在 Salesforce 支持的浏览器中高性能运行所必需的功能。因为 LWC 构建在浏览器原生运行的代码之上,所以它非常轻量,并提供卓越的性能。你所编写的大部分代码都是标准的 JavaScript 和 HTML。

Salesforce 致力于开发开放的 Web 标准,是 万维网联盟(W3C) 的成员。Salesforce 开发人员也是 Ecma 国际技术委员会 39(TC39)的贡献成员,该委员会负责推动 JavaScript 语言的发展。此外,Lightning Web Components 还是开源的

关键特性

  • 构建在浏览器原生运行的代码之上 —— 轻量且提供卓越性能
  • 大部分代码为标准 JavaScript 和 HTML —— 无需学习专有语法
  • 使用核心 Web Components 标准 —— 符合 W3C 规范
  • Salesforce 是 W3C 成员 —— 积极参与 Web 标准制定
  • LWC 是开源的 —— 可在 github.com/salesforce/lwc 和 lwc.dev 获取

向后兼容性

你可以使用两种编程模型构建 Lightning 组件:Lightning Web Components(推荐)和原始的 Aura Components。Lightning Web Components 和 Aura 组件可以在同一页面上共存并互操作。对于管理员和最终用户来说,它们都是 Lightning 组件。

Lightning 基础组件既提供 Lightning Web Components 版本,也提供 Aura Components 版本。组件参考中包含了两种版本的文档、规范和示例。

最佳实践:当你在 LWC 和 Aura 之间有选择时,始终选择 LWC。LWC 性能更好,更易于开发。只有在需要使用 LWC 尚未支持的功能时,才将 LWC 包装在 Aura 组件中。需要注意,LWC 不能包含 Aura 组件,但 Aura 可以包含 LWC。

Lightning 组件库

Lightning 组件库

Lightning 组件库包含了组件参考信息以及 Lightning Web Security 和 Lightning Locker 的安全工具。你可以在两个地方找到组件库:公开站点(无需登录)和连接到你的 Salesforce 组织的认证站点

公开组件库

组织专属组件库(认证站点)

  • 登录后访问:https://<myDomainName>.lightning.force.com/docs/component-library
  • 额外功能:查看组织独有的 Lightning 组件、查看托管包中安装的组件、按组织拥有或包安装进行筛选

组件参考(Component Reference)

旧版组件参考的已知限制

  • 非 lightning 命名空间差异:公开站点中非 lightning 命名空间的组件参考可能包含过时内容,建议在认证站点中验证
  • 不支持自定义 LWC 文档:组件参考不显示你组织中的自定义 Lightning Web Components 文档
  • 规格面板缺少内容:部分模块(如 lightning/empApi、lightning/flowSupport 等)在规格页面上不显示描述和方法
  • 不支持版本和本地化:组件参考没有版本或语言选择器,仅显示当前版本,且仅提供英文内容

Lightning Web Security 和 Lightning Locker

Lightning Web Security 和 Locker 工具

Lightning Web Security(LWS)—— 新一代安全架构

LWS 是 Spring '22 引入的新一代安全架构,基于最新的 Web 标准,通过在虚拟 JavaScript 沙箱中运行组件来防止不安全代码行为。使用 LWS ConsoleLWS Distortion Viewer 来开发与 LWS 兼容的安全 JavaScript 代码。

Lightning Locker —— 传统安全机制

Lightning Locker 是传统的安全架构,通过 API 过滤提供组件隔离和安全保护,允许来自多个来源的代码使用安全、标准的 API 进行执行和交互。使用 Locker ConsoleLocker API Viewer 来开发与 Locker 兼容的代码。

LWS 与 Locker 的关键区别

  • LWS:现代虚拟沙箱方式,基于最新 Web 标准
  • Lightning Locker:传统 API 过滤方式
  • 两者共同点:都强制执行 JavaScript 严格模式(strict mode)

平台安全限制

  • 在 Salesforce 平台上,this.template.host 始终返回 null(与 OSS 不同,OSS 中返回组件宿主元素)
  • 通过 template 获取的组件的 shadowRoot 也始终返回 null

开始编码:创建你的第一个组件

创建你的第一个组件

编写你的第一个 Lightning Web Component 的最快方式是使用在线实时编码环境。推荐使用 StackBlitz 在线 IDE 快速入门。你也可以使用 Salesforce DX 工具 将 LWC 代码推送到你的组织。

注意:StackBlitz 是第三方产品,受其自身条款和条件的约束。Salesforce 不对 StackBlitz 上提供的内容、服务或付费选项负责。

在 StackBlitz 上创建你的第一个组件

  1. 访问 playground.lwc.dev(无需注册即可使用,使用 GitHub 账户登录可保存更改)
  2. 将鼠标悬停在 x 目录上,点击 Add Folder 图标,输入组件名称,例如 myComponent
  3. myComponent 目录下创建 HTML 文件 myComponent.html(文件名必须与目录名一致):
    <template>
      <p>Hello {name}!</p>
    </template>
  4. 创建 JavaScript 文件 myComponent.js(同样需要匹配目录名):
    import { LightningElement } from "lwc";
    
    export default class MyComponent extends LightningElement {
      name = "LWC";
    }
  5. app.html 中的 <x-counter></x-counter> 后面添加 <x-my-component></x-my-component>
  6. 保存更改并刷新预览区域,将显示 "Hello LWC!"

组件结构要点

  • 每个组件 = 一个文件夹 + .html 文件 + .js 文件
  • 命名空间 + 组件名 → <x-my-component>(HTML 中使用 kebab-case,JS 中使用 PascalCase)
  • 必须继承 LightningElement
  • {表达式} 用于数据绑定

开发环境与后续步骤

开发环境与后续步骤

StackBlitz 使用指南

  • 自动更新:StackBlitz 自动更新到最新的 OSS LWC 版本,该版本通常领先于你的 Salesforce 组织版本。可在 package.jsondevDependencieslwc 值查看版本(如 3.6.0)
  • 无法访问 Salesforce 数据:不支持 @salesforce/* 导入,不支持 Lightning Data Service wire adapters
  • 不包含 SLDS 和基础组件:如需基础组件示例,请使用组件参考
  • 适合学习 LWC 框架基础和复现框架问题

StackBlitz 之后的后续步骤

  1. 在你的本地机器上搭建开发环境(Salesforce DX 工具)
  2. 将 LWC 代码推送到你的 Salesforce 组织
  3. 学习模板中的数据绑定
  4. 探索 Trailhead 和示例代码
  5. 开始使用 Salesforce 数据构建应用

Lightning Web Components 开源

LWC 开源

Lightning Web Components 是开源的,让你可以探索源代码、根据需求自定义行为,并在任何平台上(不仅仅是 Salesforce)构建企业级 Web Components。

开源资源

使用 LWC 开源的优势

  • 使用同一框架构建 Salesforce 和非 Salesforce 应用
  • 在应用之间共享代码
  • 使用基于 Web 标准的前沿框架
  • 采用最新的模式和最佳实践

LWC OSS 与 LWC on Platform 对比

特性 LWC OSS LWC on Platform
部署方式 下载、配置、部署到任意主机 Salesforce 管理配置、部署和升级
发布周期 每周发布 每年 3 次发布
版本领先性 领先平台 3-6 个月 落后 OSS 3-6 个月
引擎 完全相同 完全相同
区别 编译器和运行时配置不同

编译时差异(Salesforce 平台)

  • 实验性 LWC API(如 lwc:dynamic、buildCustomElementConstructor、createElement 等)被限制,会抛出 linting 错误
  • 强制执行 @salesforce/eslint-config-lwc/base 中的所有规则
  • 禁止动态 import(import('c/foo')
  • 禁止从 LWC 访问 Aura(如 $A
  • @salesforce/* 导入会针对组织元数据进行验证

运行时差异(Salesforce 平台)

  • 组件以 @lwc/synthetic-shadow 模式运行
  • SVG <use> 元素的 link/href 属性被 Locker 清理以防止恶意脚本注入
  • this.template.host 始终返回 null
  • 通过 template 获取的子组件 shadowRoot 始终返回 null

LWC API 版本管理

LWC API 版本管理
可用 API 版本:LWC API v59.0 及更高版本

从 Winter '24 开始,LWC 支持自定义组件的版本管理。从 Spring '25 开始,版本管理对于所有自定义组件变为强制要求。当组件指定了版本时,该组件便依赖于该特定版本的 Salesforce 发布。组件的每个 HTML、CSS 和 JS 文件都对应一个 API 版本,API 版本告诉 LWC 框架按照该 Salesforce 发布对应的行为来运行,从而确保你的组件拥有稳定的执行环境

关键规则

  • 之前保存的未版本化组件可以继续运行
  • 下次修改组件时,必须同时设置 API 版本
  • 尝试保存未版本化的组件将导致错误

版本管理的优势

  • 保证向后兼容性 —— 组件行为不会因平台升级而改变
  • 稳定执行环境 —— 组件行为锁定到特定 Salesforce 发布版本
  • 安全升级 —— 可以安全地升级平台,而不会破坏现有组件
  • 灵活迁移 —— 每个组件可以使用不同的 API 版本,支持渐进式升级

支持的浏览器和 JavaScript

支持的浏览器和 JavaScript

支持的浏览器

Lightning Web Components 支持与 Lightning Experience 相同的浏览器 —— 最新稳定版本的 EdgeChromeFirefoxSafari。Salesforce 已于 2023 年 1 月 1 日停止支持 Internet Explorer 11。Winter '24 之后,你将无法再使用 IE11 和其他旧版浏览器访问 Lightning Experience。

关于浏览器扩展

  • Salesforce 不提供对第三方浏览器扩展的支持,使用风险自负
  • 操纵 DOM 的浏览器扩展(如插入或删除 DOM 元素)可能会干扰 Lightning Experience 的稳定性
  • 建议通过 AppExchange 或组件参考寻找受支持的替代方案
  • 如需操作 DOM,考虑使用 lightning/platformResourceLoader 来引入 JavaScript 库

支持的 JavaScript

  • 使用最新版本的 JavaScript
  • 可以使用浏览器支持且 Lightning Locker/LWS 允许的任何 JavaScript 功能
  • 标准 JavaScript 文档参见 MDN(Mozilla Developer Network)
  • LWC 特定功能(如 wire adapters)在本开发者指南中记录
  • LWS 和 Lightning Locker 都强制执行 JavaScript 严格模式(strict mode)

支持的 Salesforce 目标、工具和 API

支持的 Salesforce 目标、工具和 API

支持的目标平台

在开发组件时,请在组件的配置文件中指定其目标平台:

  • Lightning Experience 和 Salesforce 移动应用
  • Lightning App Builder 和 Experience Builder
  • Lightning Web Runtime 和独立应用
  • Lightning 控制台应用和实用工具栏
  • Flows(流程)、快速操作、自定义标签页
  • Gmail/Outlook 集成、嵌入式服务聊天
  • Lightning Out(Beta)、OmniScripts
  • 第一代/第二代托管包、非托管包、变更集
  • URL 可寻址组件

不支持的场景(需要用 Aura 包装)

  • Chatter 扩展、全局操作
  • 列表视图操作、相关列表视图操作
  • 标准操作覆盖

支持的 Salesforce API

  • CRM Analytics API —— 数据集和仪表板
  • Einstein Discovery API —— 检索 Einstein Discovery 故事
  • Einstein 生成式 AI Models API —— 连接 LLM 大语言模型
  • EMP API —— 订阅流式频道事件
  • Lightning Console API —— 工作区标签页和实用工具栏
  • Metadata API —— 部署和检索 LWC 包
  • Mobile SDK —— 在混合应用中使用 LWC
  • Service Cloud Voice Toolkit API
  • Service Knowledge API —— 知识文章
  • Tooling API —— LWC 包管理
  • UI API —— 记录、列表视图等(通过 wire adapters)

不支持的 API(需要用 Aura 包装)

  • Lightning Console Navigation Item API
  • Conversation Toolkit API
  • Omni Toolkit API

如何选择:Lightning Web Components 还是 Aura?

Lightning Web Components 比 Aura 组件性能更好,更易于开发。然而,在开发 LWC 时,你有时也需要使用 Aura,因为 LWC 目前还不支持 Aura 的所有功能。

核心原则:始终选择 Lightning Web Components,除非你需要一个不受支持的功能。

要使用不受支持的体验或功能,开发一个 LWC 并将其包装在一个仅访问该体验、功能或接口的 Aura 组件中。要使用一个尚不可用作 LWC 的基础组件,你可能需要完全(或几乎完全)使用 Aura 进行开发。

感谢阅读本指南。如需继续学习,请参阅下一章:搭建你的开发环境。