일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- ReactJS
- jenkins
- springboot
- javascript
- php
- redis
- Oracle
- linux
- db
- devops
- MySQL
- java
- it
- IntelliJ
- Spring Batch
- 맛집
- tool
- Design Patterns
- Git
- Spring
- Web Server
- laravel
- Spring Boot
- JVM
- jsp
- Gradle
- AWS
- 요리
- ubuntu
- elasticsearch
Archives
- Today
- Total
아무거나
[reactjs] React + Typescript - 2 (프로젝트 생성) 본문
반응형
React 프로젝트 생성
Create React App
Create React App은 React의 작업 환경을 자동으로 구축해준다. Dan Abamov가 만들었다(Redux를 만든사람으로 유명하다)
- 프로젝트 생성
- create-react-app {프로젝트명}
- 개발 서버 실행
- npm run start
- 프로덕션 빌드
- npm run build
- 테스트
- npm run test
- 프로젝트의 구조가 바뀜(ex:위험도가 높으므로 사용을 지양)
- npm run eject
- pwa(Progressive Web App) 적용
Create React App 설치
create-react-app global 설치
npm i create-react-app -g
// create-react-app {프로젝트명} 으로 설치
// .은 현재경로에 설치한다는 뜻
// typescript를 할꺼므로 --scripts-version=react-scripts-ts 를 추가한다.
create-react-app . --scripts-version=react-scripts-ts
실행을 하면 아래와 같이 페이지가 표시되면 성공
yarn start
테스트 방법
yarn run test // create-react-app에 watch 모드가 기본적으로 설정되어있다.
빌드 방법
yarn run build
위의 명령을 실행하면 프로젝트 폴더에 build/ 폴더가 생성되어 해당 경로에 소스가 배포된다.
디렉토리 구조
디렉토리 구조 설명
react-typescript-app-example-2
├── node_modules
├── public
│ └── index.html
│ └── favicon.ico
│ └── manifest.json
├── src
│ └── App.css
│ └── App.test.tsx
│ └── App.tsx
│ └── index.css
│ └── index.tsx // webpack의 진입로
│ └── logo.svg
│ └── registerServiceWorker.ts
├── .gitignore
├── package.json
├── README.md
├── tsconfig.json
├── tslint.json
└── yarn.lock
index.tsx
- 메인 엔트리 파일
- 꼭대기에서 ReactDom.render를 수행
- pwa를 위한 서비스 워커 등록 작업 index.css
- 글로벌 스타일 작성 (아무곳에서나 써도 사용이 가능하다.) App.tsx
- App 컴포넌트(샘플 컴포넌트)
- 클래스명과 파일명을 맞추는 것이 관례 App.css
- App 컴포넌트에서만 쓰이는 스타일 App.test.tsx
- App 컴포넌트에 대한 테스트 작성 파일 registerServiceWorker.ts
- pwa 서비스 워커 사용 등록
ts-loader => tsconfig.json 설명
[tsconfig.json]
{
"compilerOptions": {
"baseUrl": ".",
"outDir": "build/dist", // 빌드 결과물 폴더
"module": "esnext", // 빌드 결과의 모듈 방식은 common.js
"target": "es5", // 빌드 결과물은 es5 방식
"lib": ["es6", "dom"], // 라이브러리는 es6과 dom
"sourceMap": true, // .map.js 파일도 함께 생성
"allowJs": true, // JS 파일도 컴파일 대상
"jsx": "react", // JSX 구문 사용 가능(ts구문을 인식하기 위해서 jsx에 react를 썼다.)
"moduleResolution": "node", // 모듈 해석 방식은 node 처럼
"rootDir": "src", // 컴파일할 대상들이 들어있느 폴더(루트폴더)
"forceConsistentCasingInFileNames": true, // import할때 모듈명이 하나는 대문자로 시작하고 다른 하나는 소문자로 시작할때 모듈을 읽어오는데 문제가 생긴다. 그래서 true로 한다. (https://github.com/TypeStrong/ts-loader/issue/89)
"noImplicitReturns": true, // 제대로 리턴 다 안되면 에러
"noImplicitThis": true, // this 표현식에 암시적으로 any로 추론되면
"noImplicitAny": true, // 암시적으로 선언되었는데 any로 추론되면
"importHelpers": true,
"strictNullChecks": true, // null이나 undefined를 서브타입으로 사용하지 못하게 함(즉, null 될 수도 있으면 반드시 타입에 표시해줘야한다.)
"suppressImplicitAnyIndexErrors": true, // 인덱싱 시그니처가 없는 경우(ex: [key: string]: any), 인덱스를 사용했을때 noImplicitAny 에 의해 에러가 뜨는것을 예외로함
"noUnusedLocals": true // 사용 안하는 로컬 변수가 있으면 에러
},
"exclude": [
"node_modules",
"build",
"scripts",
"acceptance-tests",
"webpack",
"jest",
"src/setupTests.ts"
]
}
[index.tsx]
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import App from './App';
import './index.css';
import registerServiceWorker from './registerServiceWorker';
//
ReactDOM.render(
<App />,
// id가 root인 dom에다가 app이라는 컴포넌트를 render -> 즉, App 하위에 있는 컴포넌트를 다 실행함
document.getElementById('root') as HTMLElement
);
registerServiceWorker();
[App.tsx]
import * as React from 'react';
import './App.css';
import logo from './logo.svg';
// App이라는 컴포넌트 안에 render라는 함수를 구현한것이다.
class App extends React.Component {
public render() {
return (
<div className="App">
<header className="App-header">
<img src={logo} className="App-logo" alt="logo" />
<h1 className="App-title">Welcome to React</h1>
</header>
<p className="App-intro">
To get started, edit <code>src/App.tsx</code> and save to reload.
</p>
</div>
);
}
}
export default App;
참조
https://www.inflearn.com/course/react-with-typescript#
반응형
'Javascript & HTML & CSS > reactjs' 카테고리의 다른 글
[reactjs] React + Typescript - 4 (React-Router) (0) | 2019.11.19 |
---|---|
[reactjs] React + Typescript - 3 (Component와 props, state) (0) | 2019.11.19 |
[reactjs] React + Typescript - 1 (시작하기) (0) | 2019.11.19 |
[reactjs] React Base - 6 (Update와 Delete) (0) | 2019.11.19 |
[reactjs] React Base - 5 (Create) (0) | 2019.11.19 |
Comments