diff --git a/docs/extensions/get-started/your-first-extension.md b/docs/extensions/get-started/your-first-extension.md index 4e43246a41..218d563831 100644 --- a/docs/extensions/get-started/your-first-extension.md +++ b/docs/extensions/get-started/your-first-extension.md @@ -1,5 +1,11 @@ # Your First Extension +We recommend to always use [Yeoman generator for Lens Extension](https://github.com/lensapp/generator-lens-ext) to start new extension project. [Read the generator guide here](../guides/generator.md). + +If you want to setup the project manually, please continue reading. + +## First Extension + In this topic, you'll learn the basics of building extensions by creating an extension that adds a "Hello World" page to a cluster menu. ## Install the Extension diff --git a/docs/extensions/guides/generator.md b/docs/extensions/guides/generator.md new file mode 100644 index 0000000000..68f0ad2e7c --- /dev/null +++ b/docs/extensions/guides/generator.md @@ -0,0 +1,65 @@ +# New Extension Project with Generator + +The [Lens Extension Generator](https://github.com/lensapp/generator-lens-ext) scaffolds a project ready for development. Install Yeoman and Lens Extension Generator with: + +```bash +npm install -g yo generator-lens-ext +``` + +Run the generator and fill out a few fields for a TypeScript project: + +```bash +yo lens-ext +# ? What type of extension do you want to create? New Extension (TypeScript) +# ? What's the name of your extension? my-first-lens-ext +# ? What's the description of your extension? My hello world extension +# ? What's your extension's publisher name? @my-org/my-first-lens-ext +# ? Initialize a git repository? Yes +# ? Install dependencies after initialization? Yes +# ? Which package manager to use? yarn +# ? symlink created extension folder to ~/.k8slens/extensions (mac/linux) or :User +s\\.k8slens\extensions (windows)? Yes +``` + +Start webpack, which watches the `my-first-lens-ext` folder. + +```bash +cd my-first-lens-ext +npm start # start the webpack server in watch mode +``` + +Then, open Lens, you should see a Hello World item in the menu: + +![Hello World](images/hello-world.png) + +## Developing the Extension + +Try to change `my-first-lens-ext/renderer.tsx` to "Hello Lens!": + +```tsx +clusterPageMenus = [ + { + target: { pageId: "hello" }, + title: "Hello Lens", + components: { + Icon: ExampleIcon, + } + } +] +``` + +Then, Reload Lens by CMD+R (Mac) / Ctrl+R (Linux/Windows), you should see the menu item text changes: + +![Hello World](images/hello-lens.png) + +## Debugging the Extension + +[Testing](../testing-and-publishing/testing.md) + +## Next steps + +You can take a closer look at [Common Capabilities](../capabilities/common-capabilities.md) of extension, how to [style](../capabilities/styling.md) the extension. Or the [Extension Anatomy](anatomy.md). + +You are welcome to raise an [issue](https://github.com/lensapp/generator-lens-ext/issues) for Lens Extension Generator, if you find problems, or have feature requests. + +The source code of the generator is hosted at [Github](https://github.com/lensapp/generator-lens-ext) diff --git a/docs/extensions/guides/images/hello-lens.png b/docs/extensions/guides/images/hello-lens.png new file mode 100644 index 0000000000..5e2c0ac0a5 Binary files /dev/null and b/docs/extensions/guides/images/hello-lens.png differ diff --git a/docs/extensions/guides/images/hello-world.png b/docs/extensions/guides/images/hello-world.png new file mode 100644 index 0000000000..1a4a9c73a9 Binary files /dev/null and b/docs/extensions/guides/images/hello-world.png differ diff --git a/mkdocs.yml b/mkdocs.yml index 80a75c6dc0..f225d2250c 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -32,6 +32,7 @@ nav: - Overview: extensions/guides/README.md - Main Extension: extensions/guides/main-extension.md - Renderer Extension: extensions/guides/renderer-extension.md + - Generator: extensions/guides/generator.md - Testing and Publishing: - Testing Extensions: extensions/testing-and-publishing/testing.md - Publishing Extensions: extensions/testing-and-publishing/publishing.md