reactjs - „Modulul nu a fost găsit” sau „Calea de import nu se poate încheia cu tsx” folosind Storybook cu TypeScript


Scriu un component care folosește un alt component, așa că am scris

import { Text } from "../Text/Text"

în fișierul /src/stories/TextArea/TextArea.tsx.

Totuși, aceasta dă eroarea

Module not found: Can't resolve '../Text/Text' in '/Users/username/project/src/stories/TextArea'

Schimbarea declarației de import în

import { Text } from "../Text/Text.tsx"

funcționează perfect. În schimb, linterul se plânge:

An import path cannot end with a '.tsx' extension. Consider importing '../Text/Text.js' instead.ts(2691)

Din câte înțeleg, extensiile .tsx sunt interzise în TypeScript, așa că reconfigurarea linter-ului nu pare să fie cea mai bună opțiune.

Evident, importarea în schimb a Text.js nu funcționează deoarece nu există. Storybook ar trebui să funcționeze din start cu TypeScript, așa că nu sunt sigur ce trebuie să fac.

În fișierele .mdx pe care le folosesc ca și povești (cum ar fi Text.stories.mdx), importurile, inclusiv .tsx, sunt acceptate fără plângeri din partea linter-ului. Eliminarea extensiei produce o eroare similară de tip Module not found.

Proiectul a fost creat cu create-react-app și rulează Storybook 6.5.15.

Răspuns #1

importul tău import { Text } from "../Text/Text" ar trebui să funcționeze bine.

Asigură-te că folosești cea mai recentă versiune de Storybook - 6.5.15.

...

Am încercat să reproduc problema ta și nu am reușit. Nu am întâmpinat aceeași eroare și importul a funcționat perfect. Permite-mi să descriu pașii pe care i-am urmat:

Am instalat Storybook în proiectul meu folosind npx storybook init --type react. Aceasta a instalat Storybook 6.5.15 pentru React.

Am creat un component simplu în ./project/src/Button.tsx

import React from 'react'

export const Button = () => {
  return <div>MY BUTTON</div>
}

Am creat o poveste simplă în ./project/stories/Button.stories.jsx astfel:

import React from 'react';

import { Button } from '../src/Button';

// More on default export: https://storybook.js.org/docs/react/writing-stories/introduction#default-export
export default {
  title: 'Example/Button',
  component: Button,
  // More on argTypes: https://storybook.js.org/docs/react/api/argtypes
  argTypes: {
    backgroundColor: { control: 'color' },
  },
};

// More on component templates: https://storybook.js.org/docs/react/writing-stories/introduction#using-args
const Template = (args) => <Button {...args} />;

export const Primary = Template.bind({});

// More on args: https://storybook.js.org/docs/react/writing-stories/args
Primary.args = {
  primary: true,
  label: 'Button',
};

Și nu există probleme. Importul funcționează așa cum trebuie. Dacă acest lucru nu te ajută, spune-ne mai multe despre configurarea proiectului tău (de exemplu, folosești Create-react-app), etc. Astfel, această problemă este mai ușor de reprodus.