上一篇:使用Theia——構建你本身的IDEhtml
本例中,咱們將添加一個菜單項「Say hello」用來顯示一個通知「Hello world!」。本文將指導你完成全部必要的步驟。前端
Theia應用程序由所謂的擴展包(extensions)構成。一個擴展包提供一組特定功能的小部件、命令和處理程序等。Theia自己提供了一些擴展包,如編輯器、終端、項目視圖等。每個擴展包都屬於它們各自的npm包。node
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.5/install.sh | bash nvm install 10
以及yarn:python
npm install -g yarn
還須要確保已安裝python 2.x,可經過python --version來檢查。git
npm install -g yo generator-theia-extension mkdir theia-hello-world-extension cd theia-hello-world-extension yo theia-extension hello-world-extension
咱們來看下生成的代碼。根目錄下的package.json文件中定義了workspaces、依賴項lerna以及一些用來給瀏覽器或electron構件本地包的scripts。github
{ "private": true, "scripts": { "prepare": "lerna run prepare", "rebuild:browser": "theia rebuild:browser", "rebuild:electron": "theia rebuild:electron" }, "devDependencies": { "lerna": "2.4.0" }, "workspaces": [ "hello-world-extension", "browser-app", "electron-app" ] }
同時也生成了lerna.json文件,用來配置lerna:typescript
{ "lerna": "2.4.0", "version": "0.1.0", "useWorkspaces": true, "npmClient": "yarn", "command": { "run": { "stream": true } } }
{ "name": "hello-world-extension", "keywords": [ "theia-extension" ], "version": "0.1.0", "files": [ "lib", "src" ], "dependencies": { "@theia/core": "latest" }, "devDependencies": { "rimraf": "latest", "typescript": "latest" }, "scripts": { "prepare": "yarn run clean && yarn run build", "clean": "rimraf lib", "build": "tsc", "watch": "tsc -w" }, "theiaExtensions": [ { "frontend": "lib/browser/hello-world-frontend-module" } ] }
export default new ContainerModule(bind => { // add your contribution bindings here bind(CommandContribution).to(HelloWorldCommandContribution); bind(MenuContribution).to(HelloWorldMenuContribution); });
Command被定義爲一種簡單的數據結構,其中包含id和label。id中包含了在command contribution中註冊的處理程序,用來實現command的功能。代碼生成器已經添加了一個command和一個處理程序,用於顯示一個「Hello World!」的消息。npm
export const HelloWorldCommand = { id: 'HelloWorld.command', label: "Shows a message" }; @injectable() export class HelloWorldCommandContribution implements CommandContribution { constructor( @inject(MessageService) private readonly messageService: MessageService, ) { } registerCommands(registry: CommandRegistry): void { registry.registerCommand(HelloWorldCommand, { execute: () => this.messageService.info('Hello World!') }); } } ...
... @injectable() export class HelloWorldMenuContribution implements MenuContribution { registerMenus(menus: MenuModelRegistry): void { menus.registerMenuAction(CommonMenus.EDIT_FIND, { commandId: HelloWorldCommand.id, label: 'Say Hello' }); } }
如今來看看咱們的擴展包是如何工做的。爲此,生成器在browser-app目錄中建立了一個package.json文件,定義了一個含有幾個擴展包的Theia瀏覽器應用程序,其中包含了咱們的hello-world-extension。目錄中剩餘的其它文件都是由yarn在構建過程當中經過theia-cli工具自動生成的,如scripts部分中所定義的。json
{ "name": "browser-app", "version": "0.1.0", "dependencies": { "@theia/core": "latest", "@theia/filesystem": "latest", "@theia/workspace": "latest", "@theia/preferences": "latest", "@theia/navigator": "latest", "@theia/process": "latest", "@theia/terminal": "latest", "@theia/editor": "latest", "@theia/languages": "latest", "@theia/markers": "latest", "@theia/monaco": "latest", "@theia/typescript": "latest", "@theia/messages": "latest", "hello-world-extension": "0.1.0" }, "devDependencies": { "@theia/cli": "latest" }, "scripts": { "prepare": "theia build", "start": "theia start", "watch": "theia build --watch" }, "theia": { "target": "browser" } }
如今全部構建和運行應用程序須要的部分都準備好了,要運行它,輸入下面的命令:後端
cd browser-app
yarn start <path to workspace>
而後在瀏覽器中輸入http://localhost:3000,在打開的應用程序中選擇Edit>Say Hello,你將會看到 「Hello World!」的消息彈出。
{ "name": "electron-app", ... "theia": { "target": "electron" } }
在運行electron應用程序以前,你須要從新構建一些本地的模塊:
yarn rebuild:electron cd electron-app yarn start <path to workspace>
若是你想公開你的擴展包,咱們建議你將它發佈到npm。你能夠經過在擴展包的目錄中調用yarn publish來完成,固然前提是你須要一個有效的帳戶。