typescript - Storybook webpack yapılandırmasına yol takma adları nasıl eklenir?


Nextjs ve webpack ile Storybook kullanıyorum. İşte benim .storybook/main.ts dosyam:

import type { StorybookConfig } from '@storybook/nextjs';

const config: StorybookConfig = {
  ...
  framework: {
    name: '@storybook/nextjs',
    options: {},
  },
  ...
};

export default config;

Bu kombinasyon, bu çalışma alanının tsconfig.json dosyasından TypeScript ayarlarını otomatik olarak alır - bu çok güzel. Sadece Storybook için bazı TypeScript yol takma adları eklemeye çalışıyorum. Çeşitli Stack Overflow cevaplarına dayanarak aşağıdakileri denedim, fakat çalışmıyor - Storybook, @/components gibi yollardan yapılan importlarla karşılaştığında hata veriyor.

const config: StorybookConfig = {
  ...
  webpackFinal: (config) => {
    if (config.resolve) {
      config.resolve.alias = {
        ...config.resolve.alias,
        '@/*': [
          './src/*',
          '../../packages/ui-lib/src/*',
        ],
      };
    }

    return config;
  },
};

Eğer tsconfig.json dosyama aynı takma adları koyarsam, Storybook çalışıyor. Ancak bunu yapmak istemiyorum çünkü bu çalışma alanının tsconfig dosyası ui-lib klasöründeki kaynak kod hakkında hiçbir şey bilmiyor olmalı.

Bunun neden çalışmadığına dair herhangi bir fikrin var mı?

P.S. Ayrıca yolları şöyle belirlemeyi de denedim: path.resolve(__dirname, "../../packages/ui-lib/src") - o da işe yaramadı.

Cevap #1

Hiç tsconfig-paths-webpack-plugin denediniz mi?

Ben de benzer bir sorunla karşılaştım ve bunu şöyle çözdüm:

yarn add -D tsconfig-paths-webpack-plugin
npm install -D tsconfig-paths-webpack-plugin
//main.ts
import type { StorybookConfig } from "@storybook/react-webpack5";

const TsconfigPathsPlugin = require("tsconfig-paths-webpack-plugin");

const config: StorybookConfig = {
 //...
   webpackFinal: async (config) => {
    if (config.resolve) {
      config.resolve.plugins = [
        ...(config.resolve.plugins || []),
        new TsconfigPathsPlugin({
          extensions: config.resolve.extensions,
        }),
      ]
    }
    return config;
  },
}