You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Nuxt3中@sidebase/nuxt-auth与Histoire Vue上下文冲突求助

解决Nuxt3 + @sidebase/nuxt-auth 与 Histoire Vue 上下文冲突问题

问题场景

基于Nuxt3和Vue3的项目,集成@sidebase/nuxt-auth模块后,运行yarn story:dev时出现上下文冲突错误,移除该模块后Histoire可正常运行。

解决思路与方案

1. 在Histoire中排除@sidebase/nuxt-auth模块

Histoire的HstNuxt插件默认会加载所有Nuxt模块,但@sidebase/nuxt-auth是偏向服务端/运行时的模块,在Histoire的组件预览环境中不需要加载。可以直接在Histoire配置中指定要加载的Nuxt模块,排除auth模块:

修改histoire.config.ts:

import { defineConfig } from 'histoire';
import { HstNuxt } from '@histoire/plugin-nuxt';
import { HstVue } from '@histoire/plugin-vue';

export default defineConfig({
  plugins: [
    HstVue(),
    HstNuxt({
      nuxtConfig: {
        modules: [
          '@nuxtjs/tailwindcss',
          'nuxt-icon',
          '@pinia/nuxt',
          '@nuxtjs/robots',
          'nuxt-viewport',
          // 不包含@sidebase/nuxt-auth
        ],
      },
    }),
  ],
});

2. 条件加载@sidebase/nuxt-auth模块

在Nuxt配置中,通过环境变量判断是否为Histoire运行环境,只在非Histoire环境加载auth模块:

首先修改nuxt.config.ts:

export default defineNuxtConfig({
  modules: [
    '@nuxtjs/tailwindcss',
    'nuxt-icon',
    '@pinia/nuxt',
    '@nuxtjs/robots',
    'nuxt-viewport',
    // 仅在非Histoire环境加载auth模块
    ...(process.env.NODE_ENV !== 'storybook' ? ['@sidebase/nuxt-auth'] : []),
  ],
  // 其他原有配置保持不变
});

然后修改package.json中的脚本,添加环境变量:

"scripts": {
  "story:dev": "NODE_ENV=storybook histoire dev"
}

3. 版本兼容性检查

确认@sidebase/nuxt-auth的版本与当前Nuxt3、Histoire的版本是否兼容。可以查看该模块的官方文档或GitHub仓库的README,尝试升级到最新稳定版,或降级到已知兼容的版本:

# 升级到最新版
yarn add @sidebase/nuxt-auth@latest

# 或降级到指定版本,比如v0.6.0
yarn add @sidebase/nuxt-auth@0.6.0

4. 模拟Auth上下文(针对依赖Auth的组件)

如果你的组件依赖@sidebase/nuxt-auth提供的上下文(比如useAuth组合式函数),可以在Histoire中添加模拟插件,避免因找不到上下文报错:

创建histoire/plugins/auth-mock.ts文件:

import { definePlugin } from '@histoire/plugin-vue';

export default definePlugin({
  setup(ctx) {
    // 模拟useAuth返回的对象
    ctx.app.provide('auth', {
      useAuth: () => ({
        user: null,
        isAuthenticated: false,
        login: () => Promise.resolve(),
        logout: () => Promise.resolve(),
        // 根据组件需求添加其他属性/方法
      }),
    });
  },
});

然后在histoire.config.ts中引入该插件:

import { defineConfig } from 'histoire';
import { HstNuxt } from '@histoire/plugin-nuxt';
import { HstVue } from '@histoire/plugin-vue';
import authMock from './histoire/plugins/auth-mock';

export default defineConfig({
  plugins: [HstVue(), HstNuxt(), authMock],
});

内容的提问来源于stack exchange,提问作者Elizeo Rocha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 07:31:22