티스토리 뷰
1. vite 설치하기
npm create vite@latest
저의 경우 React를 사용하기에 React를 선택했습니다.
타입스크립트를 설정해 줍니다.
기본과 swc 둘 중 어느 것을 선택해도 상관없습니다.
2. src를 만들고 패키지로 만들 코드를 보관할 폴더인 lib를 만들어줍니다.
패키지가 여러 개라면 다음과 같이 작성했습니다.
src/lib/index.tsx
export { default as Container } from './Container';
export { default as Flex } from './Flex';
export { default as Grid } from './Grid';
export { default as MasonryLayout } from './MasonryLayout';
src/lib/Container.tsx
import { ElementType, ReactElement, forwardRef } from 'react';
import { PolymorphicComponentProps, PolymorphicRef } from '../types/common';
import * as S from './style';
export interface _ContainerProps {
/**
* 컴포넌트의 최소 너비를 지정하는 옵션입니다. 500px, 50%와 같이 문자열로 사용할 수 있습니다.
*/
minWidth?: string;
/**
* 컴포넌트의 최대 너비를 지정하는 옵션입니다. 500px, 50%와 같이 문자열로 사용할 수 있습니다.
*/
maxWidth?: string;
}
export type ContainerProps<T extends ElementType> = PolymorphicComponentProps<
T,
_ContainerProps
>;
type ContainerComponent = <T extends ElementType>(
props: ContainerProps<T>
) => ReactElement | null;
const Container: ContainerComponent = forwardRef(function Container<
T extends ElementType = 'div'
>({ css, as, children, ...rest }: ContainerProps<T>, ref: PolymorphicRef<T>) {
return (
<>
<S.Component ref={ref} as={as} style={{ ...css }} {...rest}>
{children}
</S.Component>
</>
);
});
export default Container;
3. vite config 파일 수정하기
경로 설정을 위한 path, @types/node, d.ts 파일 번들링을 위한 vite-plugin-dts 패키지를 설치해 줍니다.
npm i -D path @types/node vite-plugin-dts
vite.config.ts
import * as path from 'path';
import { defineConfig } from 'vite';
import dts from 'vite-plugin-dts';
export default defineConfig({
build: {
lib: {
entry: path.resolve(__dirname, 'src/lib/index.tsx'),
name: 'index',
fileName: 'index',
},
rollupOptions: {
external: ['react'],
output: {
globals: {
react: 'React',
},
},
},
commonjsOptions: {
esmExternals: ['react'],
},
},
plugins: [dts()],
});
4. tsconfig 수정하기
tsconfg가 lib 폴더의 파일들만 빌드되도록 include 설정을 바꿔줍니다.
{
"compilerOptions": {
...,
"include": ["./src/lib"], //<< 이 부분 수정
"references": [{ "path": "./tsconfig.node.json" }]
}
5. package.json 파일 수정하기
기본적으로 설정되어 있는 private 속성은 제거해야 npm에 무료로 배포가 가능합니다.
{
"name": "wus-layout-component",
"version": "1.1.9",
"type": "module",
"main": "dist/index.umd.cjs",
"module": "dist/index.js",
"types": "dist/index.d.ts",
"exports": {
".": {
"import": "./dist/index.js",
"require": "./dist/index.umd.cjs"
}
},
"files": [
"dist"
],
...
}
배포 스크립트 설정을 하면 빌드와 동시에 배포를 하고, 버전을 올려주기 때문에 편합니다.
patch, minor, major을 하기 전 dist 폴더를 삭제하고 lib 폴더를 빌드합니다. 그리고 npm version patch와 같은 명령어로 프로젝트의 버전을 올린 후 npm publish를 통해 배포합니다.
patch: 버전 0.0.1을 올려줍니다
minor: 버전 0.1.0을 올려줍니다
major: 버전 1.0.0을 올려줍니다
"scripts": {
"dev": "vite",
"build": "tsc && vite build",
"lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0",
"preview": "vite preview",
"patch": "npm version patch && npm publish",
"minor": "npm version minor && npm publish",
"major": "npm version major && npm publish",
"prepatch": "rm -rf dist && mkdir dist && npm run build",
"preminor": "rm -rf dist && mkdir dist && npm run build",
"premajor": "rm -rf dist && mkdir dist && npm run build",
"storybook": "storybook dev -p 6006",
"build-storybook": "storybook build"
},
pacakage.json에 다양한 설명을 적으면 npm 패키지의 완성도를 높일 수 있습니다.
"description": "It's a package made to use layout components comfortably",
"keywords": [
"components",
"component",
"react",
"ui"
],
"bugs": {
"email": "wolfye@naver.com"
},
"author": {
"name": "Kim YoungGil",
"email": "wolfye@naver.com",
"url": "https://github.com/Gilpop8663"
},
"repository": {
"type": "git",
"url": "https://github.com/Gilpop8663/layout-component.git"
},
"license": "MIT",
6. npm 배포 시 제외할 파일 설정하기
dist 폴더를 제외하고 아무것도 올리지 않게 설정했습니다.
.npmignore
**/*
!/dist/**
7. npm 로그인 후 배포하기
계정이 없다면 npm에서 계정을 만든 후 터미널에서 npm login을 입력해 로그인해 줍니다
npm login
로그인을 마치셨다면 npm publish를 통해 배포할 수 있습니다.
만약 스크립트를 설정했다면 npm run patch와 같이 사용하시면 됩니다.
+) 배포 전 패키지 설치하여 사용해 보기
빌드 후 아래와 같이 설치하여 사용할 수 있습니다.
npm i ./dist
"dependencies": {
"react": "^18.2.0",
"react-dom": "^18.2.0",
"wus-layout-component": "file:dist"
},
참고자료
'배포' 카테고리의 다른 글
[ERROR] Netlify 배포 시 node version error 해결 방법 (0) | 2023.01.08 |
---|---|
heroku 무료 버전 폐지 ! cloudtype.io 로 웹 서버 옮기기 json-server 를 배포 (0) | 2023.01.07 |
heroku 무료 버전 폐지 ! fly.io로 웹 서버 옮기기 (wsl2 fly.io install) (0) | 2022.12.30 |
gh-pages 로 리액트 사이트 배포하기 // gh-pages 로 SPA 지원하기 // 배포한 사이트 새로고침 가능 (0) | 2022.02.27 |
heroku 에서 배포한 사이트 30분 주기로 잠에서 깨우기 잠자는 사이트 (0) | 2022.02.19 |
- Total
- Today
- Yesterday
- C언어
- import/order
- 노마드코더
- 윤성우 열혈C프로그래밍
- createPortal
- nodejs
- 초보
- jest
- 프론트앤드
- env
- 북클럽
- nextjs
- 우아한테크코스
- NextApiRequest
- electron
- CLASS
- NextRequest
- javascript
- React
- TopLayer
- 노개북
- error
- 아차산
- Storybook
- WSL2
- 위코드
- 스토리 북
- 원티드
- 프리온보딩
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 28 |
29 | 30 | 31 |