@aurelia/storybook

中文文档
3.0.0发布于 2026/08/06MITTypeScriptES Module构建来源已验证近 30 天下载 5132

使用 Vite 、 Webpack 或 Rsbuild/ Rspack 渲染 Aurelia 2 组件的故事书插件

中文使用文档
文档目录16 节
  1. 兼容性
  2. 何谓有效
  3. 安装
  4. 维特
  5. 网页包 5
  6. 建设/包装
  7. 配置故事书
  8. 写故事
  9. 自定义模板和计划内容
  10. Aurelia 配置
  11. 从播放函数挂起
  12. 文档和MDX
  13. Vest 浏览器测试
  14. 便携式故事
  15. 发展
  16. 许可证

@aurelia/故事书

@aurelia/storybook 运行 Aurelia 2 组件 在故事书 10 。 它提供渲染器,构建器预设,CSF类型,可绑定控制,docs支持,可移植故事,以及从一等故事书框架所期望的测试集成.

该框架与Vite、Webpack 5和Rsbuilding/Rspack合作。 你准备好了 component 在故事元数据中写出正常的"故事本"故事; 里面没有渲染器锅炉板 .storybook/preview.ts。 。 。 .

兼容性

编支持的版本
奥雷利亚2.0.0-rc.2
故事书10.5.x
节点.js^20.19.0 或者说 >=22.12.0
虚拟构建器维特 7.x 或者说 8.x 财务报告和审定财务报表 @storybook/builder-vite 10.5.x
网页包构建器@storybook/builder-webpack5 10.5.x
Rsbuilding 构建器建设 2.x 财务报告和审定财务报表 storybook-builder-rsbuild 3.4.x

奥雷利亚 2.0.0-rc.2 支持Vite 8的Oxc管道,包括TC39装饰. 不需要额外的 Babel 或 SWC 配置 .

何谓有效

  • CSF 3 和输入的 CSF 工厂, 装有装饰器、装入器、 全球器、 标签、 故事扩展和 run
  • 自动组件渲染, 将可装订的组件映射到 Storybook 参数和控件
  • 通过操作和互动测试 storybook/test
  • 播放函数 mount
  • 自动文档, MDX, 可绑定的参数类型、 组件描述和动态 Aurelia 源标记
  • 故事层面和全球Aurelia资源、DI注册、容器和设置钩
  • live arg 更新而不重新启动 Aurelia app; 结构变化 清空重挂载
  • 便携式故事通过 composeStory, (中文(简体) ), composeStories,以及 setProjectAnnotations
  • Vite、Webpack 5和Rsbuilt/Rspack开发和静态建筑
  • 故事书的Vitest addon 运行真正的铬测试

安装

从您的构建者的命令开始 。 已存在的 Aurelia app 通常已有 Aurelia 构建器插件或加载器 .

维特

npm install --save-dev @aurelia/storybook storybook @storybook/builder-vite @aurelia/vite-plugin

Vite 7和Vite 8获得支持. 使用 Vite 8 时 @aurelia/vite-plugin 2.0.0-rc.2 或更新.

网页包 5

npm install --save-dev @aurelia/storybook storybook @storybook/builder-webpack5 @aurelia/webpack-loader ts-loader

建设/包装

npm install --save-dev @aurelia/storybook storybook storybook-builder-rsbuild @rsbuild/core @aurelia/webpack-loader

添加 @storybook/addon-docs, (中文(简体) ), @storybook/addon-a11y,并视需要提供其他补充.

配置故事书

对于 Vite , 创建 .storybook/main.ts数字 :

import { defineMain } from '@aurelia/storybook/node';

export default defineMain({
  stories: ['../src/**/*.@(mdx|stories.@(ts|js))'],
  addons: ['@storybook/addon-docs', '@storybook/addon-a11y'],
  framework: {
    name: '@aurelia/storybook',
    options: {},
  },
  core: {
    builder: '@storybook/builder-vite',
  },
});

框架预设在故事本配置还没有时会添加Aurelia Vite插件. 也使Aurelia的运行时包脱离了Vite依赖性预捆绑,因此渲染器和组件使用一个运行时实例.

Webpack 用不同的构建器使用相同的文件 :

core: {
  builder: '@storybook/builder-webpack5',
},

预设添加 ts-loader 财务报告和审定财务报表 @aurelia/webpack-loader 规则一次,保留任何已经在配置中的规则.

用于 Rsbuilding,使用:

core: {
  builder: 'storybook-builder-rsbuild',
},

Rsbuild预设增加了相匹配的Aurelia Rspack规则.

 .storybook/preview.ts 包含工程设置和附加类型 :

import { definePreview } from '@aurelia/storybook';
import addonA11y from '@storybook/addon-a11y';
import addonDocs from '@storybook/addon-docs';

export default definePreview({
  addons: [addonA11y(), addonDocs()],
  tags: ['autodocs'],
  parameters: {
    controls: {
      matchers: {
        color: /(background|color)$/i,
        date: /Date$/i,
      },
    },
  },
});

不导出 render 或者说 renderToCanvas 从预览文件。 故事本从框架预设中加载它们.

上面的工厂表可以输入故事本 preview.meta 财务报告和审定财务报表 meta.story APIs (英语). 使用正则对象 satisfies Preview 继续支助CSF 3项目.

添加常用脚本 :

{
  "scripts": {
    "storybook": "storybook dev -p 6006",
    "build-storybook": "storybook build"
  }
}

写故事

故事书的CSF 工厂 API 推断 Aurelia 组件实例、附加参数、装饰器和故事参数:

import preview from '../../.storybook/preview';
import { expect, fn, userEvent } from 'storybook/test';
import { HelloWorld } from '../hello-world';

const meta = preview.meta({
  title: 'Example/HelloWorld',
  component: HelloWorld,
  args: {
    message: 'Hello from Storybook',
    onIncrement: fn(),
  },
});

export const Default = meta.story({
  play: async ({ args, canvas }) => {
    await userEvent.click(canvas.getByRole('button', { name: 'Increment' }));
    await expect(args.onIncrement).toHaveBeenCalledWith(1);
  },
});

export const Renamed = Default.extend({
  args: { message: 'Extended story' },
});

工厂故事也揭露了故事书的元数据, run, (中文(简体) ), extend,测试API。 当项目倾向于物品出口时,CSF 3仍然可用.

自动渲染覆盖了普通大小写 :

import type { Meta, StoryObj } from '@aurelia/storybook';
import { fn, userEvent, within } from 'storybook/test';
import { HelloWorld } from '../hello-world';

const meta = {
  title: 'Example/HelloWorld',
  component: HelloWorld,
  args: {
    message: 'Hello from Storybook',
    onIncrement: fn(),
  },
  argTypes: {
    message: { control: 'text' },
    onIncrement: { action: 'increment' },
  },
} satisfies Meta<typeof HelloWorld>;

export default meta;
type Story = StoryObj<typeof meta>;

export const Default = {} satisfies Story;

export const Interaction = {
  play: async ({ canvasElement }) => {
    const canvas = within(canvasElement);
    await userEvent.click(canvas.getByRole('button', { name: 'Increment' }));
  },
} satisfies Story;

生成的 Aurelia 模板只绑定了存在的参数 。 Oncentables 保存组件自身的默认值. 添加或去除可绑定的参数重挂已生成的模板;更改已存在的值更新运行中的视图模型.

自定义模板和计划内容

使用 defineAureliaStory 当组件需要具体标记、本地资源或预测内容时:

import {
  defineAureliaStory,
  type Meta,
  type StoryObj,
} from '@aurelia/storybook';
import { CardHeading } from '../card-heading';
import { ProductCard } from '../product-card';

const meta = {
  component: ProductCard,
} satisfies Meta<typeof ProductCard>;

export default meta;
type Story = StoryObj<typeof meta>;

export const Detailed = {
  render: (args) =>
    defineAureliaStory({
      template: `
        <product-card product.bind="product">
          <card-heading>Featured</card-heading>
        </product-card>
      `,
      props: args,
      register: [ProductCard, CardHeading],
    }),
  args: {
    product: { name: 'Desk lamp' },
  },
} satisfies Story;

故事结果可以包含:

外地目的
template故事的奥雷莉亚标记
Component此故事的组件覆盖
props在故事书参数后合并的值
innerHtml自动生成组件元素的预计加价
register 或者说 components自定义元素、属性、数值转换器、插件和其他注册
itemsDI 登记和服务
container现有的 Aurelia 容器

渲染函数也可能直接返回模板字符串或Aurelia自定义元素类.

Aurelia 配置

为预览、组件组或单个故事注册资源 parameters.aurelia数字 :

import { Registration } from 'aurelia';
import type { Preview } from '@aurelia/storybook';
import { FeatureFlags } from '../src/feature-flags';
import { MoneyValueConverter } from '../src/money-value-converter';

const preview = {
  parameters: {
    aurelia: {
      register: [MoneyValueConverter],
      configureContainer: (container) => {
        container.register(
          Registration.instance(FeatureFlags, { newCheckout: true })
        );
      },
      configure: (aurelia, context) => {
        // Configure the app before it starts.
      },
    },
  },
} satisfies Preview;

export default preview;

全包设置, 使用 setup 从 .storybook/preview.ts数字 :

import { setup } from '@aurelia/storybook';

setup(async (aurelia, context) => {
  // Runs for every newly mounted story app.
});

setup 返回未注册函数,该函数在测试环境中有用.

从播放函数挂起

结构 mount 当播放函数控制初始渲染时 :

import { expect } from 'storybook/test';

export const MountedByPlay = {
  play: async ({ mount }) => {
    const canvas = await mount({
      Component: HelloWorld,
      props: { message: 'Mounted from play' },
    });

    await expect(canvas.getByText('Mounted from play')).toBeVisible();
  },
};

故事书检测到已解结构的参数,并在运行故事后检查前等待这个挂载.

文档和MDX

添加 @storybook/addon-docs 以启用 autodocs 和 MDX。 Aurelia 可绑定物出现在 bindables 类别,和动态源块显示故事使用的 Aurelia 标记。 设定 parameters.docs.source.code 当一个故事需要一个手写源的例子时.

常规故事书 MDX 工作没有奥雷利亚特有的包装:

import { Meta, Canvas } from '@storybook/addon-docs/blocks';
import * as Stories from './hello-world.stories';

<Meta of={Stories} />

# Hello World

<Canvas of={Stories.Default} />

Vest 浏览器测试

故事书"Vitest"的"addon"可以在Chrimium运行同样的故事. 扩展该应用程序的 Vite 配置, 以便测试项目得到一个完全的 Aurelia 插件实例 :

import path from 'node:path';
import { fileURLToPath } from 'node:url';
import { storybookTest } from '@storybook/addon-vitest/vitest-plugin';
import { playwright } from '@vitest/browser-playwright';
import { defineConfig } from 'vitest/config';

const dirname = path.dirname(fileURLToPath(import.meta.url));

export default defineConfig({
  test: {
    projects: [
      {
        extends: './vite.config.ts',
        plugins: [
          storybookTest({ configDir: path.join(dirname, '.storybook') }),
        ],
        test: {
          name: 'storybook',
          browser: {
            enabled: true,
            headless: true,
            provider: playwright({}),
            instances: [{ browser: 'chromium' }],
          },
        },
      },
    ],
  },
});

不添加另一个 aurelia() 当扩展的 Vite 配置已经拥有时, 请调用此工程 。 将奥雷利亚公约模板两次将第一个生成的模块变为模板文本.

Vite 8 和工厂预览, 预装该预览导入的附加入口 。 这使得Vite无法在发现浏览器时重新加载首个浏览器测试运行:

optimizeDeps: {
  include: [
    '@storybook/addon-a11y',
    '@storybook/addon-docs',
    '@storybook/addon-vitest',
    'storybook/internal/csf',
  ],
},

便携式故事

该套件输出Aurelia-aware可移植-故事帮助:

import { composeStories } from '@aurelia/storybook/portable-stories';
import * as stories from './hello-world.stories';

const { Default } = composeStories(stories);

await Default.run();

何时 .storybook/preview.ts 导出一个 CSF 3 配置对象, 使用 setProjectAnnotations 一次在一个测试设置文件中,如此可移植的故事收到:

import { setProjectAnnotations } from '@aurelia/storybook/portable-stories';
import preview from '../.storybook/preview';

setProjectAnnotations(preview);

国别服务框架 工厂故事已经带有预览说明. 导入一个并拨打 await Story.run() 直接代替再编组.

发展

这个寄存器是一个npm工作空间,包含框架和Vite,Webpack,和Rsbuild等实例.

npm ci
npm run sync:versions:check
npm run lint
npm run typecheck
npm test
npm run build
npm run lint:examples
npm run typecheck:examples
npm run test:examples
npm run build:examples
npm run build:storybooks
npm run test:storybook

npm run test:storybook 需要一个铬二进制。 安装它 npx playwright install chromium 如果Playwright还没有这样做.

许可证

麻省理工学院

版本与发布记录

@aurelia/storybook 共发布 10 个版本,首次发布于 2025/02/05;过去 12 个月发布了 5 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
3.0.0latest2026/08/063 个月前
2.3.02026/06/025 个月前
2.2.12026/01/239 个月前
2.1.02026/01/189 个月前
2.0.02025/11/1711 个月前
1.0.22025/06/281.4 年前

关于 @aurelia/storybook 的常见问题

@aurelia/storybook 是什么?

使用 Vite 、 Webpack 或 Rsbuild/ Rspack 渲染 Aurelia 2 组件的故事书插件

如何安装 @aurelia/storybook?

在项目目录运行 npm install @aurelia/storybook,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:aurelia(^2.0.0-rc.2)、storybook(^10.5.6)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@aurelia/storybook 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@aurelia/storybook 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@aurelia/storybook 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js ^20.19.0 || >=22.12.0。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@aurelia/storybook 可以商用吗?

@aurelia/storybook 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@aurelia/storybook 的下载量有多少?

根据 npm 官方下载统计,@aurelia/storybook 在 2026/10/07 – 2026/11/05 这 30 天内被下载 5,132 次,日均约 171 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@aurelia/storybook 还在维护吗?

最新版本 3.0.0 发布于 2026/08/06(3 个月前);至今共发布 10 个版本,其中过去 12 个月发布了 5 个;首次发布于 2025/02/05。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。