직접 제작한 리액트-타입스크립트-보일러플레이트 소개
글 작성자: 택시 운전사
반응형
👋 들어가며
오늘은 필자가 간단한 프로젝트를 시작할때마다 사용하는 React
와 TypeScript
를 이용한 보일러플레이트를 소개하고자한다. 해당 보일러플레이트의 링크는 다음과 같다.
🏗 기본구조
기본은 create-react-app의 타입스크립트 템플릿
기본적으로 create-react-app의 타입스크립트 템플릿 기반이다. 해당 템플릿은 다음 커맨드로 설치할 수 있다.
npx create-react-app my-app --template typescript
# or
yarn create react-app my-app --template typescript
global-styles.ts
전역으로 쓰이는 CSS 파일은 global-styles.ts
라는 파일로 관리하고 있다. 해당 파일에는 각종 전역스타일과 웹상의 CDN 파일을 불러온다. 불러오는 CDN 종류는 다음과 같다.
- `normalize.css - 전역 CSS를 normalize한다. (⚠️ reset과 다른 역할이다.)
- Font Awesome - 각종 아이콘을 사용할 수 있다..
- 각종 웹 폰트 - 구글 웹폰트에서 가져오며 현재 배달의민족 도현, 송명, 나눔고딕, 나눔명조, 나눔손글씨 펜, 검은고딕를 사용중이다.
import { createGlobalStyle } from './typed-components';
import { fontSize, color, media } from './config/_mixin';
export const GlobalStyle = createGlobalStyle`
/*
normalize.css - https://necolas.github.io/normalize.css/
*/
@import url("https://cdnjs.cloudflare.com/ajax/libs/normalize/8.0.1/normalize.css");
/*
Fontawesome - https://fontawesome.com/
*/
@import url("https://use.fontawesome.com/releases/v5.11.2/css/all.css");
/*
Web Fonts from Google Fonts
배달의민족 도현 - https://fonts.google.com/specimen/Do+Hyeon
송명 - https://fonts.google.com/specimen/Song+Myung
나눔 고딕 - https://fonts.google.com/specimen/Nanum+Gothic
나눔 명조 - https://fonts.google.com/specimen/Nanum+Myeongjo
나눔손글씨 펜 - https://fonts.google.com/specimen/Nanum+Pen+Script
검은고딕 - https://fonts.google.com/specimen/Black+Han+Sans
Use the following CSS rules to specify these families:
font-family: 'Black Han Sans', sans-serif;
*/
@import url("https://fonts.googleapis.com/css?family=Nanum+Gothic|Black+Han+Sans|Do+Hyeon|Song+Myung|Nanum+Myeongjo|Nanum+Pen+Script");
* {
box-sizing: border-box;
}
body{
font-family: 'Nanum Gothic', sans-serif;
font-size: ${fontSize.normalFontSize};
/* background-color: ${color.default.bgColor};
color: ${color.default.fontColor}; */
background-color: ${color.darkmode.bgColor};
color: ${color.darkmode.fontColor};
${media.giant} {
/* Giant View */
}
${media.desktop} {
/* Desktop View */
}
${media.tablet} {
/* Tablet View */
}
${media.phone} {
/* Phone View */
}
}
a{
text-decoration: none !important;
&:hover{
color: ${color.default.mainColor};
color: ${color.darkmode.mainColor};
}
}
button{
cursor: pointer;
background-color: white;
outline: none;
border: none;
&:active {
outline: none;
border: none;
}
}
/* animations */
@keyframes spin {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(360deg);
}
}
@keyframes fadeIn {
0%{
opacity: 0;
}
100%{
opacity: 1;
}
}
`;
추가된 라이브러리
styled-components
개인 작업을 할 시 스타일과 로직이 분리되면 작업속도가 현저히 줄어든다. CSS상에서 컴포넌트상의 state
를 사용하고도 싶기도하고, 그렇다면 styled-components
를 사용하는 것이 좋다.
각종 포메터
기존에 사용하던 프로젝트와 코딩 경험을 동일하게 유지하기위해 2개의 포메터를 사용한다.
eslint
각종 eslint
와 관련된 패키지를 깔고 설정을 하여 사용중이다.
// .eslintrc
{
"extends": [
"eslint:recommended",
"plugin:react/recommended",
"plugin:@typescript-eslint/recommended",
"prettier/@typescript-eslint",
"plugin:prettier/recommended"
],
"plugins": ["react", "@typescript-eslint", "prettier"],
"env": {
"browser": true,
"jasmine": true,
"jest": true
},
"settings": {
"react": {
"pragma": "React",
"version": "detect"
}
},
"parser": "@typescript-eslint/parser"
}
prettier
Visual Studio Code의 Prettier 확장프로그램과 함께 사용하고 있다.
// .prettierrc
{
"singleQuote": true,
"semi": true,
"useTabs": false,
"tabWidth": 2,
"trailingComma": "all",
"printWidth": 80,
"arrowParens": "always",
"orderedImports": true
}
버전관리
.nvmrc
.nvmrc
파일을 이용해 해당 프로젝트의 노드 버전을 통일하고 있다. 주로 노드의 LTS 버전을 사용하고 있다.
// .nvmrc
13.0.1
package.json
버전 관리를 위해 역시 package.json을 사용한다.
// package.json
{
"name": "react-typescript-boilerplate",
"version": "0.1.0",
"private": true,
"dependencies": {
"react": "^16.11.0",
"react-dom": "^16.11.0",
"react-router": "^5.1.2",
"react-scripts": "^3.3.0",
"styled-components": "^4.4.0"
},
"devDependencies": {
"@testing-library/react": "^9.3.0",
"@types/jest": "24.0.20",
"@types/node": "12.11.7",
"@types/react": "^16.9.11",
"@types/react-dom": "16.9.3",
"@types/react-router": "^5.1.2",
"@types/styled-components": "^4.1.19",
"@typescript-eslint/eslint-plugin": "^2.5.0",
"@typescript-eslint/parser": "^2.5.0",
"eslint": "^6.8.0",
"eslint-config-react": "^1.1.7",
"eslint-loader": "^3.0.2",
"tslint": "^5.20.0",
"typescript": "^3.6.4"
},
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test",
"eject": "react-scripts eject"
},
"eslintConfig": {
"extends": "react-app"
},
"browserslist": {
"production": [
">0.2%",
"not dead",
"not op_mini all"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
}
}
반응형
'Web > React' 카테고리의 다른 글
리액트에서 새로고침을 해야 함수가 작동하는 경우 (2) | 2020.03.02 |
---|---|
[⚛React] React Element, React Component 그리고 JSX (0) | 2020.01.19 |
[⚛React] 🐶 이모지를 이용한 빙고게임 만들기 (1) | 2019.01.31 |
[⚛React] React 기본 개념 (0) | 2018.12.26 |
React로 WYSIWYG 에디터 뭘로 시작하지? (4) | 2018.12.20 |
댓글
이 글 공유하기
다른 글
-
리액트에서 새로고침을 해야 함수가 작동하는 경우
리액트에서 새로고침을 해야 함수가 작동하는 경우
2020.03.02 -
[⚛React] React Element, React Component 그리고 JSX
[⚛React] React Element, React Component 그리고 JSX
2020.01.19 -
[⚛React] 🐶 이모지를 이용한 빙고게임 만들기
[⚛React] 🐶 이모지를 이용한 빙고게임 만들기
2019.01.31 -
[⚛React] React 기본 개념
[⚛React] React 기본 개념
2018.12.26