上一篇我們簡單的描述了一下Salesforce DX的配置以及CLI的簡單功能使用,此篇主要簡單描述一下LWC如何實現helloWorld以及LWC開發時應該注意的一些規範。
做國內專案的同學直觀的感覺可能時這兩年新專案基本上都在使用lightning,如果進行客製化使用aura框架進行開發。對於新專案來說,如果受夠了classic平臺下js,css都在page裡面寫,並且一個標籤或者一個actionFunction各種reRender的雜亂情況下,aura模組的分層管理還是很易讀的;但是對於老專案遷移來說,如果曾經用bootstrap等前端框架再往aura框架下遷移簡直就是痛苦。因為aura框架相當於salesforce推出的一套全新的前端框架,封裝的功能以及組建用到了很多自定義的東西,而不是標準的web功能,導致我們開發人員學習成本以及遷移成本增加。而且由於aura框架進行了自定義的前端框架,所以感覺aura框架下lightning執行比較慢。為此,salesforce提供了一個新的前端框架LWC來實現更多的標準化,LWC實現了W3C的WEB標準,加速了lightning的執行以及更大程度的減少框架自身的客製化內容。上篇我們也說了,LWC開發需要和Salesforce DX一起,目前官方推薦 VSCode + Salesforce Extension Pack來開發LWC。本篇主要例舉最簡單的helloWorld component來對LWC入門,後期會講更深入的LWC的知識。
我們建立Aura的lightning Component會生成一個bundle,裡面包含很多型別的檔案,當我們在建立LWC的lightning component也會生成一個bundle,兩者生成的型別和數量有區別,對應的mapping關係如下。
我們在使用aura的時候對待命名規範有要求,但是某些點不是特別嚴格,針對LWC的官方建議的命名規則如下:
- 必須需要小寫字母作為命名開頭;
- 必須只能包含字母數字或者下劃線;
- 名稱空間中必須唯一
- 不能包含空格符
- 不能以下劃線結尾
- 不能包含兩個連續下劃線
- 不能包含破折號
有一點和aura框架差距蠻大的地方是當父component引用子component時,比如子component名字是 sonComponent,父component名字是parentComponent.
針對Aura框架下的引用: <c:sonComponent/>
針對LWC框架下的引用:<c-son-component/>
在LWC中,預設的名稱空間和Aura相同,為c。在進行引用時,會按照命名規則的駝峰要求進行拆分,中間使用'-'進行連線各個單詞,並且將駝峰中的大寫改成小寫。在專案命名時,建議使用駝峰方式命名。
一. Pre Operation
1. Enable Debug Mode:為了後期更好的debug javascript程式碼,我們可以設定指定的使用者enable,方便後期查問題。
2. 安裝CLI,vscode等工具,參看上篇。
二. 建立helloLwc的LWC Project
1. 建立Project: windows環境 ctrl + shift + p,選擇 SFDX: Create Project,然後輸入想要建立的名字,這裡名稱為:helloWorld
2. Authorize Dev Hub: windows環境,ctrl + shift + p 選擇 SFDX: Authorize a Dev Hub,後期會跳轉到一個Dev Hub Org登陸介面,登陸即可;
當有下面的內容說明已經授權成功
3. 建立預設的Scratch Org環境,選擇 Create a Default Scratch Org按照步驟填寫建立
當出現下圖說明Scratch Org已經建立好。
4. 建立LWC Component:選擇SFDX: Create Lightning Web Component,按照步驟建立,名稱起為helloLwc.
當建立好以後,會預設建立好helloLwc的bunddle,包括三個檔案: helloLwc.html/helloLwc.js/helloLwc.js-meta.xml。為下面的三個檔案填充內容。
helloLwc.html
1 <template> 2 <lightning-card title="HelloWorld" icon-name="custom:custom14"> 3 <div class="slds-card__body slds-card__body_inner"> 4 Hello, {name}! 5 </div> 6 </lightning-card> 7 </template>
helloLwc.js
1 import { LightningElement,api } from 'lwc'; 2 3 export default class HelloWorld extends LightningElement { 4 @api name = 'world'; 5 }
helloLwc.js-meta.xml
1 <?xml version="1.0" encoding="UTF-8"?> 2 <LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata" fqn="helloWorld"> 3 <apiVersion>45.0</apiVersion> 4 <isExposed>true</isExposed> 5 <masterLabel>Hello World</masterLabel> 6 <description>Add a classic greeting to any page.</description> 7 <targets> 8 <target>lightning__AppPage</target> 9 </targets> 10 <targetConfigs> 11 <targetConfig targets="lightning__AppPage"> 12 <property name="name" type="String" label="Name" placeholder="World" description="Enter the name of the person to greet."/> 13 </targetConfig> 14 </targetConfigs> 15 </LightningComponentBundle>
其中,helloLwc.html的根component為<template>,做過aura的知道根對應的aura:component,aura中的attribute用來在component中展示內容,在lwc中我們需要在後臺宣告變數然後html中引用,當然在lwc中包含了3中型別的變數宣告: public reactive property / private reactive property 以及 private property。這些區別以及使用會在後續的部落格中詳細描述,這裡有一個概念就好。
針對meta.xml,他是lwc component的配置檔案,它可以配置當前的這個lwc component的相關的資訊,比如api version, 此component可以引用在哪些,比如lightning__AppPage/lightning__HomePage等。針對meta.xml的配置詳情可以參看:https://developer.salesforce.com/docs/component-library/documentation/lwc/lwc.reference_configuration_tags
4. 部署lwc component到預設的Scratch Org環境
5. 效果展示:我們建立完lightning web component以後需要檢視效果是否符合我們的預期,這裡可以有兩種方式。
1) 將此lightning web component放在 lightning app builder中,設定name的值檢視效果(因為我們在meta.xml中配置的是允許用在lightning app page中)。
2)在官方提供的play ground環境,將程式碼放在對應的目錄檔案下然後執行檢視效果。playground 連結:https://developer.salesforce.com/docs/component-library/tools/playground, 這裡不再演示這種方式。
6. 部署程式碼到其他的scratch org或者對應的Dev Hub環境: 當我們已經在scratch org已經測試差不多想要移植到Dev Hub環境或者我們當前的Dev Hub有多個Scratch Org環境,我們想要移動到其他的Scratch Org環境,這個時候我們需要使用CLI命令去實現。從下圖可知,我們現在的預設的scratch org的別名為:test-scratch-org,我們現在想要將程式碼push到另外一個scratch org。這個時候我們需要點選Terminal,選擇New Terminal以後,使用force:source:deploy命令去push到其他的org。
總結: 學習LwC的階段碰到了各種各樣的問題,感謝學習群裡面的一些大神的指點迷津。本篇只是LWC的掃盲操作篇,主要針對像我一樣沒有用過VS Code以及不知道LWC工程如何建立的小夥伴。篇中有錯誤的地方歡迎指出,有不懂的小夥伴歡迎互相交流。篇中沒有對LWC的語法進行講解,後面的部落格會慢慢詳細的講解。