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

如何修改Storybook及其插件的默认路径(受限Windows环境)

问题描述

在受限Windows环境运行Next.js应用并启动Storybook,环境版本:Node v20.8.1、Storybook 7.6.17、React 18.2、Next.js 13.1.2。

执行npm run storybook时出现权限拒绝错误:Cannot read directory '../../../My Documents': Access is denied.,随后node_modules/.cache/sb-manager下的每个文件都触发重复的panic: runtime error: invalid memory address or nil pointer dereference空指针异常。

问题根源是sb-manager生成的Windows绝对路径(如C:\USERS\USERNAME\DONT COME IN HERE!)无法访问,当前sb-manager内文件路径为c:/Users/XXXXX/Documents/XXXX/node_modules/@storybook/addon-whatever...格式,需修改为Git Bash可访问的~/Documents/XXXX/node_modules/@storybook/addon-whatever...格式,调整addons和/或sb-manager的默认路径。

报错信息

> vc-app@0.1.0 storybook
> storybook dev -p 6006
 
@storybook/cli v7.6.17
 
info => Serving static files from ./.\public at /
info => Starting manager..
X [ERROR] Cannot read directory "../../../My Documents": Access is denied.
 
X [ERROR] panic: runtime error: invalid memory address or nil pointer dereference (while parsing "../../../My Documents/XXX/XXX/node_modules/.cache/sb-manager/essentials-actions-2/manager-bundle.js")
 
  debug.Stack (runtime/debug/stack.go:24)
  helpers.PrettyPrintedStack (internal/helpers/stack.go:9)
  bundler.parseFile.func1 (internal/bundler/bundler.go:189)
  panic (runtime/panic.go:884)
  resolver.resolverQuery.tsConfigForDir (internal/resolver/resolver.go:977)
  resolver.resolverQuery.resolveWithoutSymlinks (internal/resolver/resolver.go:828)
  resolver.(*Resolver).Resolve (internal/resolver/resolver.go:577)
  bundler.RunOnResolvePlugins (internal/bundler/bundler.go:901)
  bundler.parseFile (internal/bundler/bundler.go:397)
  bundler.(*scanner).maybeParseFile (internal/bundler/bundler.go:1385)
 
X [ERROR] panic: runtime error: invalid memory address or nil pointer dereference (while parsing "../../../My Documents/XXX/XXX/node_modules/.cache/sb-manager/essentials-controls-1/manager-bundle.js")
 
  debug.Stack (runtime/debug/stack.go:24)
  helpers.PrettyPrintedStack (internal/helpers/stack.go:9)
  bundler.parseFile.func1 (internal/bundler/bundler.go:189)
  panic (runtime/panic.go:884)
  resolver.resolverQuery.tsConfigForDir (internal/resolver/resolver.go:977)
  resolver.resolverQuery.resolveWithoutSymlinks (internal/resolver/resolver.go:828)
  resolver.(*Resolver).Resolve (internal/resolver/resolver.go:577)
  bundler.RunOnResolvePlugins (internal/bundler/bundler.go:901)
  bundler.parseFile (internal/bundler/bundler.go:397)
  bundler.(*scanner).maybeParseFile (internal/bundler/bundler.go:1385)

Storybook配置文件.storybook/main.js

/** @type { import('@storybook/nextjs').StorybookConfig } */
const config = {
    stories: [
        "../stories/**/*.mdx",
        "../stories/**/*.stories.@(js|jsx|mjs|ts|tsx)",
        "../components/**/*.stories.@(js|ts)",
    ],
    addons: [
        "@storybook/addon-links",
        "@storybook/addon-essentials",
        "@storybook/addon-onboarding",
        "@storybook/addon-interactions",
        "@storybook/addon-designs",
    ],
    framework: {
        name: "@storybook/nextjs",
        options: {},
    },
    core: {
        disableTelemetry: true,
    },
    docs: {
        autodocs: "tag",
    },
}
export default config
解决方案

1. 用环境变量自定义缓存目录

Storybook支持通过STORYBOOK_CACHE_DIR环境变量指定缓存路径,直接使用Git Bash兼容格式:

  • 临时生效:在Git Bash中执行
    STORYBOOK_CACHE_DIR="~/Documents/XXXX/.storybook-cache" npm run storybook
    
  • 永久生效:在项目根目录创建/修改.env文件,添加
    STORYBOOK_CACHE_DIR=~/Documents/XXXX/.storybook-cache
    

2. 在Storybook配置中指定缓存路径

修改.storybook/main.js的core配置,添加cache字段定义自定义路径:

/** @type { import('@storybook/nextjs').StorybookConfig } */
const config = {
    // 保留原有配置
    core: {
        disableTelemetry: true,
        cache: {
            directory: "~/Documents/XXXX/.storybook-cache"
            // 若~解析失败,替换为Git Bash绝对路径:"/c/Users/XXXXX/Documents/XXXX/.storybook-cache"
        }
    },
}
export default config

3. 自定义Webpack路径解析(可选)

若部分addon仍存在路径问题,通过webpackFinal配置路径别名,将Windows路径映射为Git Bash格式:

const path = require('path');

/** @type { import('@storybook/nextjs').StorybookConfig } */
const config = {
    // 保留原有配置
    webpackFinal: async (config) => {
        config.resolve.modules.push(path.resolve(__dirname, '../node_modules'));
        config.resolve.alias = {
            ...config.resolve.alias,
            '@storybook': '/c/Users/XXXXX/Documents/XXXX/node_modules/@storybook'
        };
        return config;
    },
}
export default config

4. 清理旧缓存并重启

修改配置后,先删除旧缓存目录:

rm -rf node_modules/.cache/sb-manager

再重新启动Storybook,确保新缓存目录生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 17:01:19