擴展點是通過在插件package.json文件中contributes節點下定義的一些JSON格式的配置項。以下是目前HBuilderX支持的擴展點列表:

configuration

configuration擴展點,會將擴展的配置項註冊到HBuilderX的全局可視化配置裏設置-插件配置

configuration屬性列表

title

每個插件擴展的配置是分配到同一組下的,title指的是該組的名稱,一般寫的是插件名稱。

properties

properties內配置的是一個jsonobject對象,該對象的key代表着要擴展的配置項id,value是一個符合JSON Schema規範的jsonobject,目前支持的字段包括:

  • type 類型。支持的類型包括:string、boolean、number。
  • description 描述
  • default 默認值
  • enum 可選值,目前只有type爲string或number時可用

configuration示例

  1. "contributes": {
  2. "configuration":{
  3. "title":"eslint-js",
  4. "properties":{
  5. "eslint-js.autoFixOnSave":{
  6. "type":"boolean",
  7. "default":true,
  8. "description":"保存時自動修復"
  9. },
  10. "eslint-js.validateOnDocumentChanged":{
  11. "type":"boolean",
  12. "default":false,
  13. "description":"啓用實時校驗"
  14. }
  15. }
  16. }
  17. }

效果圖如下:

configuration - 图1

commands

commands擴展點用於聲明一個命令命令可以通過menus擴展點和菜單關聯到一起

注意:當一個命令將要執行時,將會觸發一個onCommand:${commandId}activationEvent用於激活監聽該命令的插件

示例

  1. "contributes": {
  2. "commands": [
  3. {
  4. "command": "extension.firstExtension",
  5. "title": "Hello World"
  6. }
  7. ]
  8. }

keybindings

keybindings擴展點, 僅對HBuilderX 3.1.22+版本生效。

keybindings擴展點用於聲明快捷鍵綁定.

示例

  1. "keybindings":[
  2. {
  3. "command":"extension.firstExtension", // command爲您開發的插件中的command
  4. "key":"Ctrl+Shift+C", // key爲要綁定的快捷鍵
  5. "when":"", // when表達式用來動態的判斷某個條件是否滿足,強烈建議設置此項。
  6. "macosx":"command+Shift+C" // MacOSX系統的快捷鍵;如不設置此項,MacOSX系統,會將key中的ctrl轉爲command
  7. }
  8. ]

snippets

snippets擴展點可以擴展指定編程語言的代碼塊,可擴展的編程語言Id列表見這裏。擴展示例代碼如下:

  1. "contributes": {
  2. "snippets": [
  3. {
  4. "language": "css",
  5. "path": "./snippets/css.json"
  6. },
  7. {
  8. "project":"uni-app",
  9. "language": "css",
  10. "path": "./snippets/condition_comment.json"
  11. }
  12. ]
  13. }

屬性列表

屬性名稱 屬性類型 是否必須 描述
project String 是否只在指定的項目類型下生效,目前的可取值爲”Web”,”App”,”Wap2App”,”uni-app”;如果要支持多項目類型可以通過逗號分隔,例如:”Web,uni-app,App”
language String 編程語言ID,用於限定只在指定的語言下生效,語言Id的列表參見這裏
path String 要擴展的代碼塊列表文件路徑,文件內容格式見下面

代碼塊格式

每個配置項的說明如下表:

名稱 描述
key 代碼塊顯示名稱,顯示在代碼助手列表中的名字,以下例子中”console.log”就是一個key。
prefix 代碼塊的觸發字符,就是敲什麼字母匹配這個代碼塊。
body 代碼塊的內容。內容中有如下特殊格式:
$1 表示代碼塊輸入後光標的所在位置。如需要多光標,就在多個地方配置$1,如該位置有預置數據,則寫法是${1:foo1},多選項即下拉候選列表使用${1:foo1/foo2/foo3};
$2 表示代碼塊輸入後再次按tab後光標的切換位置tabstops(代碼塊展開後按tab可以跳到下一個tabstop;
$0 代表代碼塊輸入後最終光標的所在位置(也可以按回車直接跳過去)。
雙引號使用\”轉義,換行使用多個數組表示,每個行一個數組,用雙引號包圍,並用逗號分隔,縮進需要用\t表示,不能直接輸入縮進!
triggerAssist 爲true表示該代碼塊輸入到文檔後立即在第一個tabstop上觸發代碼提示,拉出代碼助手,默認爲false。

代碼塊示例

  1. // ./snippets/javascript.json
  2. {
  3. "console.log": {
  4. "prefix": "logtwo",
  5. "body": [
  6. "console.log('$1');",
  7. "\tconsole.log('${2:foo/bar}');"
  8. ],
  9. "triggerAssist": false,
  10. "description": "Log output to console twice"
  11. }
  12. }

viewsContainers

在窗體左側區域擴展一個和項目管理器同級的tab項,完整的擴展視圖流程參考如何註冊一個新的視圖?

屬性列表

屬性名稱 屬性類型 是否必須 描述
activitybar Array<ViewsContainerDef> 不是 定義擴展的視圖容器列表,可在菜單視圖-顯示擴展視圖中查看打開
rightside Array<ViewsContainerDef> 不是 定義擴展的視圖容器列表,可在菜單視圖-顯示擴展視圖中查看打開

示例

  1. "contributes": {
  2. "viewsContainers": {
  3. "activitybar": [{
  4. "id": "demoview",
  5. "title": "DemoView"
  6. }],
  7. "rightside":[{
  8. "id":"rightsideContainerId",
  9. "title":"rightside Container Title"
  10. }]
  11. },
  12. "views": {
  13. "demoview": [{
  14. "id": "extensions.treedemo",
  15. "name": "DemoView"
  16. }]
  17. },
  18. ...
  19. }

ViewsContainerDef

屬性名稱 屬性類型 是否必須 描述
id String 擴展的視圖容器(viewContainers)的id
title String 顯示在tab標籤上的標題

views

擴展新的視圖,擴展的view必須和viewsContainers內定義的視圖容器綁定以後才能生效。

目前支持TreeView和WebView,並且一個視圖容器(viewsContainers)僅支持綁定一個視圖(view)。

在該擴展點聲明後,需要通過API:window.createTreeView或者window.createWebView實現。完整的擴展視圖流程參考如何註冊一個新的視圖?

TreeView 示例

  1. //NOTEpackage.json不支持註釋,以下代碼使用時需要將註釋刪掉
  2. "contributes": {
  3. "views": {
  4. //綁定的視圖容器(viewContainers)的Id,目前一個視圖容器僅支持綁定一個視圖(view
  5. "demoview": [{
  6. //該id需要和window.createTreeView中的viewId參數一致
  7. "id": "extensions.treedemo",
  8. "name": "DemoView"
  9. }]
  10. }
  11. }

WebView 示例

從HBuilderX 2.8.1及以上版本開始支持

  1. "contributes": {
  2. "viewsContainers": {
  3. "rightside":[
  4. {
  5. "id":"containerId",
  6. "title":"Container Title"
  7. }
  8. ]
  9. },
  10. "views": {
  11. "containerId":[
  12. {
  13. //該id需要和window.createWebView中的viewId參數一致
  14. "id":"viewId",
  15. "title":"Custom View Title"
  16. }
  17. ]
  18. },
  19. ...
  20. }

menus

menus擴展點會關聯一個命令到相應的菜單項裏面,當菜單觸發時將會執行對應的`命令。

menus節點下配置的對象內的key指的是要註冊到哪個彈出菜單裏面,目前支持的key值列表如下:

  • editor/context :編輯器右鍵菜單
  • explorer/context :項目管理器右鍵菜單
  • view/item/context :通過views擴展點擴展的視圖的右鍵菜單(從HBuilderX 2.7.12及以上版本開始支持
  • menubar/file : 頂部菜單的文件菜單
  • menubar/edit : 頂部菜單的編輯菜單
  • menubar/select : 頂部菜單的選擇菜單
  • menubar/find : 頂部菜單的查找菜單
  • menubar/goto : 頂部菜單的跳轉菜單
  • menubar/run : 頂部菜單的運行菜單
  • menubar/publish : 頂部菜單的發行菜單
  • menubar/view : 頂部菜單的視圖菜單
  • menubar/tool : 頂部菜單的工具菜單
  • menubar/help : 頂部菜單的幫助菜單

menus屬性列表

屬性名稱 屬性類型 是否必須 描述
id String 菜單項的Id,如何要配置二級菜單,則需要該屬性
command String 菜單項關聯的命令Id
title String 菜單項的名稱,如果沒有配置,將採用命令的title
group String 菜單項要註冊的位置,查看目前支持的group列表。注意該屬性必須寫,不寫視爲無效菜單擴展
when String 控制菜單項是否顯示的邏輯表達式,表達式說明
checked String 從HBuilderX 2.7.6及以上版本開始支持
控制菜單項是否處於checked的邏輯表達式,表達式語法和when表達式一致

當屬性title和command都爲空時,將被識別爲分割線。

示例

  1. "contributes": {
  2. "menus": {
  3. "editor/context": [
  4. {
  5. "id":"sep",
  6. "group": "z_commands"
  7. },
  8. {
  9. "command": "extension.firstExtension",
  10. "group": "z_commands",
  11. "when":"editorTextFocus"
  12. }
  13. ]
  14. }
  15. }

註冊二級菜單

二級菜單通過將group設置爲%menuId%@1、%menuId%@2的方式來實現,其中menuId指的是菜單擴展中的id字段。代碼示例如下:

  1. "contributes": {
  2. "menus": {
  3. "editor/context": [
  4. {
  5. "id":"foo",
  6. "title": "帶子菜單的菜單",
  7. "group": "z_commands",
  8. },
  9. {
  10. "command": "extension.firstExtension",
  11. "group": "foo@1",
  12. "when":"editorTextFocus"
  13. }
  14. ]
  15. }
  16. }

group

每個彈出菜單內的group都不一樣,下面列出所有的彈出菜單下可用的group。

注意:想要將擴展菜單放到彈出菜單的最後,可以將group設置成0_foot

  • editor/context
    • copy
    • goto
    • copyPath
    • assist
    • z_commands

對應的位置如下圖所示:

configuration - 图2

  • explorer/context :項目管理器右鍵菜單
    • new
    • openInExplorer
    • nature
    • cutcopy
    • rename
    • z_commands

對應的位置如下圖所示:

configuration - 图3

  • menubar/file : 頂部菜單的文件菜單
    • new
    • tab
    • save
    • openInExplorer

對應的位置如下圖所示:

configuration - 图4

  • menubar/edit : 頂部菜單的編輯菜單
    • undo
    • copy
    • format
    • line
    • delete

對應的位置如下圖所示:

configuration - 图5

  • menubar/select : 頂部菜單的選擇菜單
    • selectAll
    • area
    • word
    • line
    • colum
    • 0_cursor
    • 1_cursor

對應的位置如下圖所示:

configuration - 图6

  • menubar/find : 頂部菜單的查找菜單
    • findFile
    • findWord
    • findSymbol

對應的位置如下圖所示:

configuration - 图7

  • menubar/goto : 頂部菜單的跳轉菜單
    • system_goto
    • line_goto
    • define_goto

對應的位置如下圖所示:

configuration - 图8

  • menubar/run : 頂部菜單的運行菜單
    • 0_foot

對應的位置在菜單的末尾。

  • menubar/publish : 頂部菜單的發行菜單
    • 0_foot

對應的位置在菜單的末尾。

  • menubar/view : 頂部菜單的視圖菜單
    • min_window
    • focus_editor
    • show_lineno
    • view_split
    • scroll
    • plus_font

對應的位置如下圖所示:

configuration - 图9

  • menubar/tool : 頂部菜單的工具菜單
    • shortcuts
    • snippets
    • ext_settings

對應的位置如下圖所示:

configuration - 图10

  • menubar/help : 頂部菜單的幫助菜單
    • documents
    • checkupdate
    • license

對應的位置如下圖所示:

configuration - 图11

when

when表達式用來動態的判斷某個條件是否滿足(即表達式的運算結果是true或者false),目前用於控制一個菜單是否顯示。目前支持的表達式運算符如下:

操作符 描述 例子
== 相等 langId == 'javascript'
!= 不相等 langId != 'html'
&& 並且 explorerResourceCount == 1 && explorerResourceIsFolder
|| 或者 explorerResourceIsFolder || explorerResourceIsWorkspaceFolder
! !explorerResourceIsFolder
=~ 正則運算 workspaceFolderRelativePath =~ /^package.json/

目前HBuilderX內置變量列表如下:

變量名 類型 描述
workspaceFolderRelativePath String 相對於項目的相對路徑,舉例: pages/user/user.vue
workspaceRelativePath String 相對於項目的相對路徑(加上項目名稱),舉例: HelloUniapp/pages/user/user.vue
workspaceFolder.type String 項目類型,可取值:UniApp_Vue,Web,App,Wap2App,Extension,Unkown
explorerResourceCount Number 項目管理器選中的資源數量
explorerResourceIsFolder Boolean 項目管理器選中的資源是否全是目錄
explorerResourceIsWorkspaceFolder Boolean 項目管理器選中的資源是否全是項目根目錄
isSVN Boolean 是否是SVN倉庫下的文件
isGit Boolean 是否是Git倉庫下的文件
activeEditor.file.exists Boolean 當前激活的編輯器打開的文件是否存在
activeEditor.file.isProjectFile Boolean 當前激活的編輯器打開的文件是否是左側項目管理器下的文件
activeEditor.readonly Boolean 當前激活的編輯器是否是隻讀
editorTextFocus Boolean 當前激活的編輯器是否有焦點
langId String 當前激活的編輯器打開的文檔的編程語言id,完整語言Id列表參見這裏
viewItem String 通過views擴展的視圖中當前選擇的item的contextValue
config.* Any 獲取某個配置項的值,例子: config.editor.fontSize
isMac Boolean 當前電腦操作系統是否是MacOSX(僅對HBuilderX3.2.22+版本生效)
isWindows Boolean 當前電腦操作系統是否是Windows(僅對HBuilderX3.2.22+版本生效)
editorHasSelection Boolean 當前激活的編輯器是否有選中的內容 (僅對HBuilderX3.2.22+版本生效)

customEditors

插件可以通過該擴展點擴展多個不同類型的自定義編輯器,自定義編輯器可以設置文件匹配模式,用戶通過項目管理器打開的文件匹配到某一類型時,在編輯器區域創建webview視圖,關聯打開的文件。

完整的擴展自定義編輯器流程參考如何擴展一個自定義編輯器?

擴展點示例如下:

  1. "contributes": {
  2. "customEditors": [{
  3. "viewType": "catEdit.catScratch",
  4. "displayName": "Cat Scratch",
  5. "selector": [{
  6. "fileNamePattern": "*.cscratch"
  7. }],
  8. "priority": "default"
  9. },
  10. ...]
  11. }

屬性列表

屬性名稱 屬性類型 是否必須 描述
viewType String 自定義編輯器類型,全局唯一
displayName String 顯示名稱(暫時未用)
selector Array<EditorSelctor> 匹配模板,指定一個或多個匹配模板,匹配成功的文件會與該類型自定義編輯器關聯
priority String 優先級(暫時未用)

EditorSelctor

屬性名稱 屬性類型 是否必須 描述
fileNamePattern String 文件名匹配,支持通配符