리액트 디자인 시스템을 NPM에 배포하는 방법
1 |
|
1. 프로젝트 세팅
- 먼저, Npm 패키지 세팅을 위해 npm init 또는 yarn init 설정을 진행해야 합니다.
1
2npm init yarn init
세부 설정은 후에 진행할 예정으로 버전정보만 초기 버전이라는 뜻으로 0.0.1 로 진행하였습니다.
2. Storybook 설치 및 React 설치
- Storybook을 설치하기 위해 npx를 사용합니다.
- Storybook 설정은 한 번만 진행하므로 npx를 사용합니다.
- npx에 대한 설명은 다른 시간에 하겠습니다.
- React 관련 프로젝트이므로, React와 React-DOM을 설치합니다.
1
2npx sb init --type react yarn add --peer react@^17.0.2 react-dom@^17.0.2
3. Typescript 설치 및 Button Component 개발
- 현재 위에 설정으로도
yarn storybook
을 실행하면 스토리북에서 기본 컴포넌트들이 나옵니다. - 그러나 우리가 만든 컴포넌트가 아니므로 모두 제거합니다.
- 그리고 TypeScript를 설치한 후, 테스트 컴포넌트를 개발하겠습니다.
1. Typescript 설치
1 |
|
2. Typescript 세팅
- 루트 디렉터리에 tsconfig.json 을 생성하고 저장합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27===== tsconfig.json ===== { "compilerOptions": { "target": "es5", "lib": [ "dom", "dom.iterable", "esnext" ], "jsx": "react-jsxdev", "module": "esnext", "moduleResolution": "node", "baseUrl": "." , "allowJs": false , "declaration": true, "outDir": "./dist", "noEmit": false, "declarationDir": "types", "isolatedModules": false, "allowSyntheticDefaultImports": true, "esModuleInterop": true, "forceConsistentCasingInFileNames": true , "strict": true, "skipLibCheck": true }, "include": ["src"] }
- tsc —init 로 typescript 세팅을 초기부터 세팅할수도있습니다.
3. stories 폴더를 제거 하고 src 폴더 및 Button 컴포넌트를 생성합니다.
1 |
|
4. 스토리북 stories 파일 경로 세팅
- init 로 스토리북을 생성하면 초기 세팅이 stories 로 되어있습니다. 해당 값을 src 로 수정합니다.
1 |
|
5. storybook을 실행하여 Button 컴포넌트가 storybook에 표시되는지 확인합니다.
- yarn storybook 명령어를 실행후 브라우저에서 로컬로 접속합시다.
4. emotion 설치 및 스타일 적용
- 컴포넌트 스타일링을 위해 emotion 을 설치 하고 Button 을 스타일링 해봅시다.
1 |
|
- emotion 을 설정한뒤 css atribute 방식으로 스타일링을 추가합니다.
- 그리고 해당 컴포넌트 위에 /** @jsxImportSource @emotion/react */ 을 추가합니다.
1 |
|
- 다시 yarn storybook 을 실행해 성공적으로 스타일링이 되었는지 확인합니다.
5. Icon 개발
- 디자인 시스템에서의 Icon 을 사용하기 위해 SVG 관련 사용 세팅을 진행해봅시다.
- SVG 관련은 다른포스트에서 설명하겠습니다.
1. 관련 라이브러리 설치
1 |
|
- 관련 라이브러리 설명
babel-plugin-named-asset-import : import 구문을 사용하여 이미지, 폰트 및 기타 리소스와 같은 정적 asset을 처리하는 바벨 플러그인 입니다.
tsconfig-paths-webpack-plugin : TypeScript의 baseUrl 및 paths 옵션을 사용하여 모듈 경로를 해석하는 데 도움을 주는 라이브러리입니다.
@svgr/webpack : Webpack 에서 svg를 로더할때 도와주는 라이브러리 입니다.
@storybook/builder-webpack5, @storybook/manager-webpack5 : sb init 설정은 webpack4가 설치되어있지만 스토리북 버전 문제로 인하여 5 추가 설치필요한 라이브러리
2. svg 관련 스토리북 설정 수정
1 |
|
3. 루트 프로젝트에 type.d.ts 파일을 작성하여 SVG 컴포넌트 관련 타입 설정을 해주고, tsconfig.json 파일에서 해당 파일을 include 해줍니다.
1 |
|
4. 테스트용 Icon svg를 추가하고 컴포넌트처럼 사용할수있게 export 해줍니다.
1 |
|
5. Icon을 만들어 name 값으로 편하게 사용할 수 있도록 만들어 봅시다. 그리고 스토리북에서 확인할 수 있도록 stories 파일도 생성해봅시다.
1 |
|
6. Rollup 세팅
- Rollup 설정을 하기전에 유명한 3가지 번들러를 비교해보자
1 |
|
1. 관련 라이브러리 설치
1 |
|
- 라이브러리 설명
@babel/plugin-transform-runtime : Babel 트랜스파일링 시, 코드를 변환하면서 필요한 런타임 함수들을 별도의 모듈로 분리하여 번들 파일의 크기를 줄이는 플러그인입니다.
@rollup/plugin-babel : Rollup에서 Babel을 사용하여 ES6+ 코드를 ES5 코드로 변환하는 플러그인입니다.
@rollup/plugin-commonjs : CommonJS 형식의 모듈을 Rollup 번들에 포함시키기 위한 플러그인입니다.
@rollup/plugin-node-resolve : Rollup 번들링 시, 모듈 경로를 해결하기 위한 플러그인입니다.
@rollup/plugin-typescript : Rollup에서 TypeScript 파일(.ts)을 번들링하기 위한 플러그인입니다.
@rollup/plugin-url : Rollup 번들링 시, 파일을 URL로 참조할 수 있는 형식으로 번들링하기 위한 플러그인입니다.
@svgr/rollup : SVG 파일을 React 컴포넌트로 변환해주는 라이브러리인 SVGR을 Rollup 번들러와 함께 사용하기 위한 Rollup 플러그인입니다.
rollup-plugin-peer-deps-external: Peer dependencies로 설치된 모듈들을 Rollup 번들에 포함시키지 않고, 외부에서 불러와 사용할 수 있도록 해주는 플러그인입니다.
2. rollup 설정
1 |
|
3. package json 에 module 과 types 를 추가하고 rollup, tsc script 를 추가하자
1 |
|
4. rollup 번들링에는 storybook 은 제외 하여야하기 때문에 tsconfig 를 수정하자.
1 |
|
5. src/index.ts 를 수정하여 번들링 패키지에 포함될 파일을 export 하자.
1 |
|
6. 번들링을 확인해보자
1 |
|
7. npm publish
- npmjs.com 에 들어가 회원가입 후 이메일 인증을 진행합니다.
- npm 을 로그인 합니다.
1
npm login
1. package.json 의 name 및 files 값을 수정합시다.
- 그리고 npm library 는 name 값이 중복되면 안되기 때문에 검색을 꼭 하고 name 을 설정합니다.
- 또한 npm 에만 사용하려는 파일을 지정하기 위해 files 를 추가합니다.
1 |
|
2. npm publish 명령어로 패키지를 배포해봅시다.
1 |
|
3. 패키지 배포를 확인해 봅시다.
8. 다른 프로젝트에서 설치후 사용해보자
1. cra 로 프로젝트를 생성 및 library-template 프로젝트를 설치하자
1 |
|
1 |
|
2. App.tsx 를 수정하고 실행하여 잘 표시되는지 확인하자
1 |
|
1 |
|
끝!
출처
https://velog.io/@velopert/design-system-using-typescript-and-storybook