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

NextJS项目中Storybook引入第三方NPM模块报错问题咨询

问题成因
  • Swiper v8及以上版本为纯ESM规范包,仅提供ESM格式导出,不再兼容CommonJS规范。Storybook默认模块解析规则优先适配CommonJS包,未针对纯ESM第三方包的路径导出规则做适配,因此无法识别swiper/react、swiper/css这类导出路径。
  • Storybook默认的构建配置(Webpack/Vite)未将swiper纳入需要转译的依赖范围,导致模块路径无法被正确解析。
  • Next.js 13+ 默认moduleResolution配置为bundler,若Storybook的TypeScript解析规则与项目配置不匹配,会进一步加重路径解析错误。
解决方案

Webpack版Storybook适配(sb init默认生成的Next.js适配版为Webpack架构)

修改.storybook/main.js配置,添加webpackFinal规则:

module.exports = {
  // 保留原有stories、addons等配置不变
  webpackFinal: async (config) => {
    // 将swiper纳入ESM转译范围
    config.module.rules.push({
      test: /\.m?js$/,
      include: /node_modules\/swiper/,
      type: "javascript/auto",
    });
    // 扩展模块解析后缀
    config.resolve.extensions = [
      ...config.resolve.extensions,
      ".mjs",
      ".js",
      ".jsx",
      ".ts",
      ".tsx",
    ];
    return config;
  },
};

Vite版Storybook适配

修改.storybook/main.js配置,添加viteFinal规则:

module.exports = {
  // 保留原有stories、addons等配置不变
  async viteFinal(config) {
    config.optimizeDeps.include = [
      ...(config.optimizeDeps?.include || []),
      "swiper/react",
      "swiper/css",
    ];
    return config;
  },
};

最终校验操作

  1. 确认项目根目录tsconfig.json中compilerOptions.moduleResolution配置为bundler(Next.js 13+默认值,无需额外修改)
  2. 执行命令清除Storybook缓存并重启服务:
yarn storybook --no-cache

内容的提问来源于stack exchange,提问作者Scott Freeman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 04:39:01