## Current Behavior - Documentation pages under "technologies" and "core-api" sections with "introduction"/"overview" IDs lack H1 titles after front matter - Some remote caching package links point to parent sections instead of overview pages ## Expected Behavior - All affected documentation pages should have H1 titles for consistency - Links should point directly to overview pages ## Related Issue(s) Fixes # ## Changes Made ### 1. Updated Remote Caching Links (commit fae9055f8c) Updated links in 3 files to point directly to overview pages: - `docs/blog/2025-01-06-nx-update-20-3.md` - `docs/shared/deprecated/custom-tasks-runner.md` - `docs/shared/recipes/running-tasks/self-hosted-caching.md` Changed links from: - `/reference/core-api/azure-cache` → `/reference/core-api/azure-cache/overview` - `/reference/core-api/gcs-cache` → `/reference/core-api/gcs-cache/overview` - `/reference/core-api/s3-cache` → `/reference/core-api/s3-cache/overview` - `/reference/core-api/shared-fs-cache` → `/reference/core-api/shared-fs-cache/overview` ### 2. Added H1 Titles to Documentation Pages Added H1 titles to 29 documentation files that were missing them: #### Core API Overview Pages (6 files) - `docs/shared/packages/azure-cache/azure-cache-plugin.md` → `# @nx/azure-cache` - `docs/shared/packages/conformance/conformance-plugin.md` → `# @nx/conformance` - `docs/shared/packages/gcs-cache/gcs-cache-plugin.md` → `# @nx/gcs-cache` - `docs/shared/packages/owners/owners-plugin.md` → `# @nx/owners` - `docs/shared/packages/s3-cache/s3-cache-plugin.md` → `# @nx/s3-cache` - `docs/shared/packages/shared-fs-cache/shared-fs-cache-plugin.md` → `# @nx/shared-fs-cache` #### Technology Introduction Pages (23 files) - `docs/shared/packages/angular/angular-plugin.md` → `# @nx/angular` - `docs/shared/packages/esbuild/esbuild-plugin.md` → `# @nx/esbuild` - `docs/shared/packages/rspack/rspack-plugin.md` → `# @nx/rspack` - `docs/shared/packages/vite/vite-plugin.md` → `# @nx/vite` - `docs/shared/packages/webpack/plugin-overview.md` → `# @nx/webpack` - `docs/shared/packages/eslint/eslint.md` → `# @nx/eslint` - `docs/shared/packages/gradle/gradle-plugin.md` → `# @nx/gradle` - `docs/shared/packages/express/express-plugin.md` → `# @nx/express` - `docs/shared/packages/node/node-plugin.md` → `# @nx/node` - `docs/shared/packages/nest/nest-plugin.md` → `# @nx/nest` - `docs/shared/packages/expo/expo-plugin.md` → `# @nx/expo` - `docs/shared/packages/react/react-plugin.md` → `# @nx/react` - `docs/shared/packages/next/plugin-overview.md` → `# @nx/next` - `docs/shared/packages/react-native/react-native-plugin.md` → `# @nx/react-native` - `docs/shared/packages/remix/remix-plugin.md` → `# @nx/remix` - `docs/shared/packages/cypress/cypress-plugin.md` → `# @nx/cypress` - `docs/shared/packages/detox/detox-plugin.md` → `# @nx/detox` - `docs/shared/packages/jest/jest-plugin.md` → `# @nx/jest` - `docs/shared/packages/playwright/playwright-plugin.md` → `# @nx/playwright` - `docs/shared/packages/storybook/plugin-overview.md` → `# @nx/storybook` - `docs/shared/packages/js/js-plugin.md` → `# @nx/js` - `docs/shared/packages/vue/vue-plugin.md` → `# @nx/vue` - `docs/shared/packages/nuxt/nuxt-plugin.md` → `# @nx/nuxt` Note: The Angular Rspack introduction page (`docs/shared/guides/angular-rspack/introduction.md`) already had an appropriate H1 title "# Introduction" and was left unchanged. All changes improve documentation consistency and navigation by ensuring proper titles and direct links to overview pages.
235 lines
8.3 KiB
Markdown
235 lines
8.3 KiB
Markdown
---
|
|
title: Nx Storybook Plugin Overview
|
|
description: This is an overview page for the Storybook plugin in Nx. It explains what Storybook is and how to set it up in your Nx workspace.
|
|
---
|
|
|
|
# @nx/storybook
|
|
|
|
[Storybook](https://storybook.js.org) is a development environment for UI components. It allows you to browse a component library, view the different states of each component, and interactively develop and test components.
|
|
|
|
This guide will briefly walk you through using Storybook within an Nx workspace.
|
|
|
|
## Setting Up Storybook
|
|
|
|
### Installation
|
|
|
|
{% callout type="note" title="Keep Nx Package Versions In Sync" %}
|
|
Make sure to install the `@nx/storybook` version that matches the version of `nx` in your repository. If the version numbers get out of sync, you can encounter some difficult to debug errors. You can [fix Nx version mismatches with this recipe](/recipes/tips-n-tricks/keep-nx-versions-in-sync).
|
|
{% /callout %}
|
|
|
|
In any Nx workspace, you can install `@nx/storybook` by running the following command:
|
|
|
|
```shell {% skipRescope=true %}
|
|
nx add @nx/storybook
|
|
```
|
|
|
|
This will install the correct version of `@nx/storybook`.
|
|
|
|
### How @nx/storybook Infers Tasks
|
|
|
|
The `@nx/storybook` plugin will create a task for any project that has a Storybook configuration file present. Any of the following files will be recognized as a Storybook configuration file:
|
|
|
|
- `.storybook/main.js`
|
|
- `.storybook/main.ts`
|
|
- `.storybook/main.cjs`
|
|
- `.storybook/main.cts`
|
|
- `.storybook/main.mjs`
|
|
- `.storybook/main.mts`
|
|
|
|
### View Inferred Tasks
|
|
|
|
To view inferred tasks for a project, open the [project details view](/concepts/inferred-tasks) in Nx Console or run `nx show project my-project --web` in the command line.
|
|
|
|
### @nx/storybook Configuration
|
|
|
|
The `@nx/storybook/plugin` is configured in the `plugins` array in `nx.json`.
|
|
|
|
```json {% fileName="nx.json" %}
|
|
{
|
|
"plugins": [
|
|
{
|
|
"plugin": "@nx/storybook/plugin",
|
|
"options": {
|
|
"buildStorybookTargetName": "build-storybook",
|
|
"serveStorybookTargetName": "storybook",
|
|
"testStorybookTargetName": "test-storybook",
|
|
"staticStorybookTargetName": "static-storybook"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
```
|
|
|
|
The `builtStorybookTargetName`, `serveStorybookTargetName`, `testStorybookTargetName` and `staticStorybookTargetName` options control the names of the inferred Storybook tasks. The default names are `build-storybook`, `storybook`, `test-storybook` and `static-storybook`.
|
|
|
|
## Using Storybook
|
|
|
|
### Generating Storybook Configuration
|
|
|
|
You can generate Storybook configuration for an individual project with this command:
|
|
|
|
```shell
|
|
nx g @nx/storybook:configuration project-name
|
|
```
|
|
|
|
or
|
|
|
|
{% tabs %}
|
|
{% tab label="Angular" %}
|
|
|
|
```shell
|
|
nx g @nx/angular:storybook-configuration my-angular-project
|
|
```
|
|
|
|
{% /tab %}
|
|
{% tab label="React" %}
|
|
|
|
```shell
|
|
nx g @nx/react:storybook-configuration my-react-project
|
|
```
|
|
|
|
{% /tab %}
|
|
{% tab label="Vue" %}
|
|
|
|
```shell
|
|
nx g @nx/vue:storybook-configuration my-vue-project
|
|
```
|
|
|
|
{% /tab %}
|
|
{% /tabs %}
|
|
|
|
These framework-specific generators will also **generate stories** and interaction tests for you.
|
|
|
|
If you are NOT using a framework-specific generator (for [Angular](/technologies/angular/api/generators/storybook-configuration), [React](/technologies/react/api/generators/storybook-configuration), [Vue](/technologies/vue/api/generators/storybook-configuration)), in the field `uiFramework` you must choose one of the following Storybook frameworks:
|
|
|
|
- `@storybook/angular`
|
|
- `@storybook/nextjs`
|
|
- `@storybook/react-webpack5`
|
|
- `@storybook/react-vite`
|
|
- `@storybook/server-webpack5`
|
|
- `@storybook/svelte-vite`
|
|
- `@storybook/sveltekit`
|
|
- `@storybook/vue-vite`
|
|
- `@storybook/vue3-vite`
|
|
- `@storybook/web-components-vite`
|
|
|
|
Choosing one of these frameworks will have the following effects on your workspace:
|
|
|
|
1. Nx will install all the required Storybook packages that go with it.
|
|
|
|
2. Nx will generate a project-level `.storybook` folder (located under `libs/your-project/.storybook` or `apps/your-project/.storybook`) containing the essential configuration files for Storybook.
|
|
|
|
3. Nx will create new `targets` in your project's `project.json`, called `storybook`, `test-storybook` and `build-storybook`, containing all the necessary configuration to serve, test and build Storybook.
|
|
|
|
Make sure to **use the framework-specific generators** if your project is using Angular, React, Next.js, Vue, Nuxt, or React Native: [`@nx/angular:storybook-configuration`](/technologies/angular/api/generators/storybook-configuration), [`@nx/react:storybook-configuration`](/technologies/react/api/generators/storybook-configuration), [`@nx/vue:storybook-configuration`](/technologies/vue/api/generators/storybook-configuration) as shown above.
|
|
|
|
### Running Storybook
|
|
|
|
Serve Storybook using this command:
|
|
|
|
```shell
|
|
nx run project-name:storybook
|
|
```
|
|
|
|
or
|
|
|
|
```shell
|
|
nx storybook project-name
|
|
```
|
|
|
|
### Building Storybook
|
|
|
|
Build Storybook using this command:
|
|
|
|
```shell
|
|
nx run project-name:build-storybook
|
|
```
|
|
|
|
or
|
|
|
|
```shell
|
|
nx build-storybook project-name
|
|
```
|
|
|
|
### Testing Storybook
|
|
|
|
With the Storybook server running, you can test Storybook (run all the interaction tests) using this command:
|
|
|
|
```shell
|
|
nx run project-name:test-storybook
|
|
```
|
|
|
|
or
|
|
|
|
```shell
|
|
nx test-storybook project-name
|
|
```
|
|
|
|
### Anatomy of the Storybook setup
|
|
|
|
When running the Nx Storybook generator, it'll configure the Nx workspace to be able to run Storybook seamlessly. It'll create a project specific Storybook configuration.
|
|
|
|
The project-specific Storybook configuration is pretty much similar to what you would have for a non-Nx setup of Storybook. There's a `.storybook` folder within the project root folder.
|
|
|
|
```text
|
|
<project root>/
|
|
├── .storybook/
|
|
│ ├── main.ts
|
|
│ └── preview.ts
|
|
├── src/
|
|
├── README.md
|
|
├── tsconfig.json
|
|
├── tsconfig.storybook.json
|
|
└── etc...
|
|
```
|
|
|
|
### Using Addons
|
|
|
|
To register a [Storybook addon](https://storybook.js.org/addons/) for all Storybook instances in your workspace:
|
|
|
|
1. In your project's `.storybook/main.ts` file, in the `addons` array of the `module.exports` object, add the new addon:
|
|
|
|
```typescript {% fileName="<project-path>/.storybook/main.ts" %}
|
|
import type { StorybookConfig } from '@storybook/react-vite';
|
|
|
|
const config: StorybookConfig = {
|
|
...
|
|
addons: ['@storybook/addon-essentials', '@storybook/addon-interactions', ...],
|
|
...
|
|
};
|
|
|
|
export default config;
|
|
```
|
|
|
|
2. If a decorator is required, in each project's `<project-path>/.storybook/preview.ts`, you can export an array called `decorators`.
|
|
|
|
```typescript {% fileName="<project-path>/.storybook/preview.ts" %}
|
|
import someDecorator from 'some-storybook-addon';
|
|
export const decorators = [someDecorator];
|
|
```
|
|
|
|
### Setting up documentation
|
|
|
|
To set up documentation, you can use [Storybook Autodocs](https://storybook.js.org/docs/react/writing-docs/autodocs). For Angular, [you can use `compodoc`](/technologies/test-tools/storybook/recipes/angular-storybook-compodoc) to infer `argTypes`. You can read more about `argTypes` in the [official Storybook `argTypes` documentation](https://storybook.js.org/docs/angular/api/argtypes#automatic-argtype-inference).
|
|
|
|
You can read more about how to best set up documentation using Storybook for your project in the [official Storybook documentation](https://storybook.js.org/docs/react/writing-docs/introduction).
|
|
|
|
## More Documentation
|
|
|
|
You can find dedicated information for React and Angular:
|
|
|
|
- [Set up Storybook for Angular Projects](/technologies/test-tools/storybook/recipes/overview-angular)
|
|
- [Set up Storybook for React Projects](/technologies/test-tools/storybook/recipes/overview-react)
|
|
- [Set up Storybook for Vue Projects](/technologies/test-tools/storybook/recipes/overview-vue)
|
|
|
|
You can find all Storybook-related Nx documentation in the [Storybook recipes section](/technologies/test-tools/storybook/recipes).
|
|
|
|
For more on using Storybook, see the [official Storybook documentation](https://storybook.js.org/docs/basics/introduction/).
|
|
|
|
### Migration Scenarios
|
|
|
|
Here's more information on common migration scenarios for Storybook with Nx. For Storybook specific migrations that are not automatically handled by Nx please refer to the [official Storybook page](https://storybook.js.org/)
|
|
|
|
- [Storybook 9 migration generator](/technologies/test-tools/storybook/api/generators/migrate-9)
|
|
- [Storybook 9 setup guide](/technologies/test-tools/storybook/recipes/storybook-9-setup)
|