Storybook在React,Next.JS,Typescript项目中找不到组件

62o28rlo  于 2023-10-18  发布在  React
关注(0)|答案(6)|浏览(120)

我的next.js,typescript和react项目都有故事书设置。该项目呈现罚款,但故事书打破和给予我的错误:“未找到模块:错误:无法解析...中的“components/atoms”。”似乎是组件的路径导致其中断:

import { Element } from 'components/atoms';

但以下方法有效:

import { Element } from '../../atoms

我有一个tsll.json文件,其中包含以下内容:

"compilerOptions": {
    "baseUrl": "src",
    },
  "include": [
    "src/**/*.ts",
    "src/**/*.tsx"
  ],
...

我在网上尝试了一些建议,但似乎没有一个能解决路径问题。我在我的.storybook文件夹中创建了一个webpack.js.js,但仍然出错。

module.exports = {
 ...
  resolve: {
    modules: [path.resolve(__dirname, 'src'), 'node_modules']
  }
};

我希望在调用文件时不使用../../,而只使用./components结构。

wz8daaqr

wz8daaqr1#

花了一些时间与故事书战斗)
下面是我的.storybook/main.js版本,它终于工作了:

const path = require("path");

module.exports = {
  webpackFinal: async (config, { configType }) => {
    config.resolve.modules.push(path.resolve(__dirname, '../src'));

    return config;
  },

  stories: [
    "../src/**/*.stories.mdx",
    "../src/**/*.stories.@(js|jsx|ts|tsx)"
  ],
  addons: [
    "@storybook/addon-links",
    "@storybook/addon-essentials",
    "@storybook/preset-create-react-app"
  ]
}
5kgi1eie

5kgi1eie2#

对于仍在寻找解决方案的人,请尝试在返回配置之前在webpackFinal中添加以下内容。这是因为storybook没有配置为使用绝对路径访问文件。

config.resolve.modules = [...(config.resolve.modules || []), path.resolve('./')]
gblwokeq

gblwokeq3#

我在解决化名问题时
错误:无法解析“@foo/bar”
在root > .storybook/main.js中,我添加了属性config.resolve.alias

const path = require('path');

module.exports = {
  stories: ['../libs/feature/src/**/*.stories.@(js|jsx|ts|tsx)'],
  addons: [
    '@storybook/addon-links',
    '@storybook/addon-essentials',
    '@storybook/addon-interactions',
  ],
  framework: '@storybook/react',
  webpackFinal: async (config, { configType }) => {
    config.resolve.alias = {
      ...config.resolve.alias,
      '@foo/bar': path.resolve(__dirname, '../libs/bar/src/'),
    };

    return config;
  },
};
huus2vyu

huus2vyu4#

上面的答案都不适用于我的NPM工作区项目。
对我来说,导致这个问题的原因是vscode开始像这样从src导入:

import { MyComponent } from "src/components/Mycomponent";

但我发现故事书的作用是这样的相对进口

import { MyComponent } from "../components/Mycomponent";

您可以通过设置下面的(see this answer)来使vscode默认使用相对导入

"typescript.preferences.importModuleSpecifier": "relative"
yjghlzjz

yjghlzjz5#

如果你已经用Typescript设置了Storybook(我也在使用NextJs,但我认为这与此无关),webpack别名的更改对我不起作用。
我有这个错误的任何见解我的组件directry。例如@/components/IconType
我在tslog.json中漏掉了这个,这使得Storybook不知道在哪里查找基目录:
"baseUrl": ".",
希望能帮助到别人

hc2pp10m

hc2pp10m6#

我觉得你需要的是路径别名。如果你正在处理一个typescript项目,你可以使用tsconfig.json paths compiler option声明Map到应用程序中某个绝对路径的别名:

"baseUrl": "./src",
"paths": {
  "components/*": ["components/*"],
  "@/common/*": ["common/*"],
 }

要知道,这并不总是那么容易,因为在生产环境中,你的构建工具链必须将它们转换到正确的路径,因为tsc不会这样做。幸运的是,nexjts最近添加了此功能=> https://nextjs.org/docs/advanced-features/module-path-aliases

相关问题