드디어 레포지토리 세팅을 하고 컴포넌트 개발을 시작해보려고 한다.
첫번째는 image file을 선택하는 input 컴포넌트
package/ui/src 경로에서 UI 컴포넌트들을 개발할 것이다.
main.ts에 stories 경로를 아래와 같이 지정해두면 스토리 파일의 경로가 src/xxx.stories.tsx 또는 src/ImageInput/xxx.stories.tsx 이던 간에 스토리북이 감지한다.
// apps/storybook/.storybook/main.ts
const config: StorybookConfig = {
stories: ["../../../packages/ui/src/**/*.stories.@(js|jsx|ts|tsx)"],
...
};
input.stories.tsx 파일을 아래와 같이 작성하고 테스트 해보았다.
import { Meta, StoryObj } from "@storybook/react";
import ImageInput from "./ImageInput";
const meta: Meta<typeof ImageInput> = {
component: ImageInput,
title: "UI/ImageInput",
decorators: [],
};
export default meta;
type Story = StoryObj<typeof meta>;
export const ImgaeFileInput: Story = {};
const ImageInput = () => {
return (
<div>
<label>
<img src="../../public/Add_Image.png" width={34} height={34} alt="Add Image" />
<p>이미지 첨부하기</p>
</label>
<input type="file" multiple></input>
</div>
);
};
export default ImageInput;
이미지가 제대로 안뜨는 문제가 있다.
파일을 옮기고 src="./Add_Image.png" 로 수정해보니 이런 에러 메시지가 뜬다.
문제점
src를 상대 경로로 사용할 수 없다.
package/ui는 라이브러리 패키지이므로 최종적으로 어디서 이 파일이 실행될지 예측할 수 없다
즉 컴포넌트를 어디서 호출할지 알 수 없음
apps/* 에서 실행된다면 상대 경로는 apps/* 를 기준으로 하게 된다. => 위에서 본 에러 메시지의 경로와 같이 됨
GET http://localhost:6006/Add_Image.png 404 (Not Found)
=> import 하여 변수로 사용
import addImage from "./Add_image.png";
const ImageInput = () => {
return (
<div>
<img src={addImage} width={34} height={34} alt="Add Image" />
</div>
);
};
export default ImageInput;
이 경우 타입스크립트가 이미지를 모듈로 인식하도록 아래 d.ts파일이 필요하다
// ui/src/declarations.d.ts
declare module "*.png" {
const value: string;
export default value;
}
마지막으로 tsconfig.json에서 typeRoots 옵션 추가
타입 정의 파일 (d.ts)를 찾는 경로를 지정해준다.
기본적인 npm 패키지의 타입 정의 파일 + 직접 만든 타입 정의파일 추가
// ui/tsconfig.json
"compilerOptions": {
"typeRoots": ["./node_modules/@types", "./src/types"]
},
사실 img 태그를 쓰기 전 next/image로부터 import한 Image 를 썼더니 아예 에러가 발생했다.
=> 이건 package/ui가 리액트 프로젝트이기 때문이다.! 하하
apps/* => next프로젝트 : ui 컴포넌트 가져다가 페이지 작성
packages/ui => react 프로젝트 : UI 컴포넌트를 작성
'개발개발 > Date-project' 카테고리의 다른 글
[date] Storybook + vanilla extract 스타일 적용하기 (0) | 2025.03.11 |
---|---|
[date] Chromatic 배포하기 (0) | 2025.03.06 |
[date] Storybook 설정하기 (0) | 2025.03.06 |
[date] package.json과 turbo.json 설정하기 (0) | 2025.03.06 |
[date] pnpm-workspace.yaml 설정하기 (0) | 2025.03.06 |