تایپاسکریپت - نمیتوان فایلهای ایستا را در NextJs + Storybook سرو کرد


مستندات nextjs (https://nextjs.org/docs/basic-features/static-file-serving) بیان میکنند که مسیر فایلهای تصویری باید در زیر دایرکتوری public اضافه شوند.

من یک کامپوننت دارم که یک کامپوننت تصویر را رندر میکند و فایل در پروژه nextjs من به درستی رندر میشود اما داخل استوریبوک رندر نمیشود. فایل تصویر در حال حاضر در public/images/ قرار دارد.

const renderImage = () => {
    const portraitClassName = cx({
        [styles.imageContainerPortrait]: true,
    });

    return (
        <img
            className={portraitClassName}
            data-testid="image"
            src="/images/portrait.png"
            alt={image.imgAlt}
        />
    );
};

این فایل پیکربندی فعلی من برای استوریبوک است

webpackFinal: async (config) => {
        config.module.rules.push({
            test: /\.(scss|sass|css)$/,
            use: [
                {
                    loader: "sass-loader",
                    options: {
                        implementation: require("sass"),
                    },
                },
                {
                    loader: "postcss-loader",
                    options: {
                        ident: "postcss",
                        plugins: [tailwindcss, autoprefixer],
                    },
                }
            ],
            include: path.resolve(__dirname, "../"),
        });
        return config;
    }

آیا چیزی کم است که به من اجازه دهد تصاویر را به همان روشی که Nextjs تنظیم شده است، نمایش دهم؟

پاسخ شماره ۱

شما باید به استوریبوک بگویید تصاویر شما را از کجا پیدا کند. در nextjs آنها در public/ قرار دارند، بنابراین میتوانید فقط -s ./public را به اسکریپت خود برای اجرای استوریبوک اضافه کنید:

//package.json
{
"scripts": {
    "start-storybook": "start-storybook -s ./public"
  }
}

لینک مستندات برای مرجع: https://storybook.js.org/docs/react/configure/images-and-assets#serving-static-files-via-storybook

پاسخ شماره ۲

چیزی که برای من جواب داد این بود که نیاز داشتم به storybook.js بگویم منابع عمومیام کجا قرار دارند، با استفاده از staticDirs.

یعنی: ریشه > .storybook دایرکتوری > main.ts

const config: StorybookConfig = {
 //other stuff .... 
  docs: {
    autodocs: 'tag',
  },

  staticDirs: ['../public/'], //<--- FIX    };

};
export default config;