배워서 나주는 시리즈 여섯번째
이번에는 React에 Typescript를 적용해볼 것이다.
생각보다 간단하니, Typescript를 적용 할 예정이라면 따라해보자.
준비물 : Node.js와 코드 에디터와 React기반 프로젝트 끗
이 글에서는 배워서 나주는 React에 Tailwind Css 적용하기에서 구축한 개발환경에서 Typescript를 적용할 것이다.
우선 Typescript를 전역으로 설치해야한다.(설치되어있다면 생략가능하다.)
npm install -g typescript
Typescript의 필수 설정파일인 tsconfig.json을 생성하자.
tsconfig.json는 프로젝트를 컴파일하는 데 필요한 루트 파일과 컴파일러 옵션을 지정한다.
tsconfig.json
{
"compilerOptions": {
"outDir": "./dist/",
"sourceMap": true,
"noImplicitAny": true,
"module": "es6",
"target": "es5",
"jsx": "react",
"allowJs": true,
"moduleResolution": "node",
"allowSyntheticDefaultImports": true
}
}
참고로
tsc --init
으로도 tsconfig.json를 생성할 수 있다. 다음으로는 이하의 패키지를 프로젝트에서 설치하자.
npm install -D @types/react
npm install -D @types/react-dom
npm install -D ts-loader
@types/react는 react의 Typescipt 버전이다.
@types/react-dom는 react-dom의 Typescipt 버전이다.
ts-loader는 .ts/.tsx확장자를 읽어들이는 로더이다.
전부 설치했다면 pakage.json는 이하와 같은 의존성(dependencies)과 개발의존성(devDependencies에)을 가지게 된다.
pakage.json
"dependencies": {
"react": "^17.0.2",
"react-dom": "^17.0.2"
},
"devDependencies": {
"@babel/core": "^7.14.3",
"@babel/preset-env": "^7.14.2",
"@babel/preset-react": "^7.13.13",
"@types/react": "^17.0.8",
"@types/react-dom": "^17.0.5",
"autoprefixer": "^10.2.6",
"babel-loader": "^8.2.2",
"clean-webpack-plugin": "^4.0.0-alpha.0",
"css-loader": "^5.2.6",
"html-webpack-plugin": "^5.3.1",
"postcss": "^8.3.0",
"postcss-loader": "^4.3.0",
"style-loader": "^2.0.0",
"tailwindcss": "^2.1.2",
"ts-loader": "^9.2.2",
"url-loader": "^4.1.1",
"webpack": "^5.38.1",
"webpack-cli": "^4.7.0",
"webpack-dev-server": "^3.11.2"
}
이제 Webpack 설정을 해주자.
webpack.config.js
우선 entry 속성의 빌드타겟을 index.js => index.ts로 변경해준다.
entry: path.resolve(__dirname, "src/index.ts"),
Webpack이 .ts/.tsx확장자를 ts-loader가 읽을 수 있도록 module에 rules배열에 추가하고,
module: {
rules: [
{
test: /\.tsx?$/,
use: "ts-loader",
exclude: /node_modules/,
},
{
test: /.jsx?$/,
include: [path.resolve(__dirname, "src")],
exclude: [path.resolve(__dirname, "node_modules")],
loader: "babel-loader",
},
{
test: /.css?$/,
exclude: [path.resolve(__dirname, "node_modules")],
use: ["style-loader", "css-loader", "postcss-loader"],
},
],
},
resolve 속성에는 .tsx를 추가하자.
resolve: {
extensions: [".tsx", ".json", ".js", ".jsx"],
},
기존의 index.js와 App.js를 각각 index.ts와 App.tsx로 내용 및 확장자를 수정하였다.
src/index.js
src/index.ts
import React from "react";
import ReactDom from "react-dom";
import App from "./components/App";
import "../styles/global.css";
const root = document.querySelector("#root");
ReactDom.render(React.createElement(App), root);
src/componets/App.js
src/componets/App.tsx
import React from "react";
const App = () => {
return (
<>
<div className="m-5 bg-yellow-500 text-blue-500 font-bold">
배워서 나주는 React에 Typescript 적용하기
</div>
</>
);
};
export default App;
npm start
잘 적용된 것을 알 수있다.
이 글은 계속해서 수정/업데이트 중에 있습니다.
관련해서 틀린 부분이 있다면 지도해 주시면 정말 감사드리겠습니다.