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

Nuxt3项目中Storybook构建后i18n功能失效问题求助

解决Nuxt3组件库Storybook构建后i18n报错问题

问题分析

组件在Nuxt开发环境和Storybook开发模式下能正常调用useI18n,但Storybook静态构建后出现报错。核心原因是构建后的Storybook脱离了Nuxt上下文,无法自动加载Nuxt的i18n配置,且常规Vue3的i18n初始化方式未适配Nuxt封装的useI18n逻辑。

可行解决方案

1. 抽离共享的i18n配置

  • 创建i18n/shared.ts文件,存放通用的i18n基础配置:
import fr from './translations/fr.json'
import en from './translations/en.json'

export const i18nBaseConfig = {
  legacy: false,
  locale: 'en',
  messages: {
    en,
    fr,
  },
}
  • 修改原i18n.config.ts,复用上述共享配置:
import { i18nBaseConfig } from './shared'

export default defineI18nConfig(() => {
  return i18nBaseConfig
})

2. 在Storybook中初始化Vue I18n并适配Nuxt的useI18n

在.storybook/preview.ts中完成以下配置:

import type { Preview } from '@storybook/vue3'
import { createI18n } from 'vue-i18n'
import { i18nBaseConfig } from '../i18n/shared'
import { useI18n as useNuxtI18n } from '#imports'

// 创建Vue I18n实例
const i18n = createI18n(i18nBaseConfig)

const preview: Preview = {
  decorators: [
    (story) => ({
      components: { story },
      setup() {
        // 模拟Nuxt的useI18n逻辑,确保组件能正常调用
        const currentI18n = useNuxtI18n ? useNuxtI18n() : i18n.global
        
        return {
          t: currentI18n.t,
          locale: currentI18n.locale,
          switchLocale: currentI18n.switchLocale,
          // 组件用到其他i18n方法可在此补充
        }
      },
      template: '<story />',
    }),
  ],
  // 将i18n插件注册到Storybook的Vue应用中
  setup(app) {
    app.use(i18n)
  },
}

export default preview

3. 配置Storybook识别Nuxt的路径别名

在.storybook/main.ts中添加Vite别名配置,让Storybook能解析Nuxt的#imports路径:

import type { StorybookConfig } from '@storybook/vue3-vite'

const config: StorybookConfig = {
  // 其他Storybook配置(如stories、addons等)
  viteFinal: async (config) => {
    config.resolve.alias = {
      ...config.resolve.alias,
      '#imports': '../.nuxt/imports.d.ts',
    }
    return config
  },
}

export default config

4. 调整构建脚本确保依赖文件存在

修改package.json中的构建脚本,先执行Nuxt的prepare命令生成必要的声明文件:

{
  "scripts": {
    "storybook:build": "nuxt prepare && storybook build"
  }
}

验证方式

执行npm run storybook:build完成构建后,用静态文件服务(如npx serve storybook-static)启动构建产物,检查组件的i18n功能是否正常运行且无报错。

内容的提问来源于stack exchange,提问作者Raphael Rlt

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 16:13:15