이전에 우리는 Webpack
을 사용해서 CRA
를 사용하지 않고 리액트 프로젝트를 만들었다.
이번에는 해당 프로젝트에 Typescript
를 사용할 수 있게 설정을 진행할 것이다.
이번에도 마찬가지로 원본 블로그의 흐름을 그대로 따라간다. 하지만 나는 tslint
가 아닌 eslint
를 사용할 것이여서 약간의 차이가 존재한다. 출처를 보시려면 여기를 클릭해주세요.
이전 글을 아직 보지 않았다면 Webpack으로 React 프로젝트 만들어보기(❌CRA)를 먼저 보고와주세요!
npm i -D typescript @babel/preset-typescript ts-loader fork-ts-checker-webpack-plugin
typescript
: Typescript(타입스크립트) 필수 라이브러리@babel/preset-typescript
: babel(바벨)에서 Typescript(타입스크립트)를 빌드하기 위해 필료한 라이브러리ts-loader
: Webpack(웹팩)에서 Typescript(타입스크립트)를 컴파일 하기 위해 필요한 라이브러리fork-ts-checker-webpack-plugin
: ts-loader의 성능을 향상시키기 위한 라이브러리webpack.config.js
를 열고 아래와 같이 설정합니다.
const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
// Typescript(타입스크립트)를 빌드할 때 성능을 향상시키기 위한 플러그인를 불러오기
const ForkTsCheckerWebpackPlugin = require('fork-ts-checker-webpack-plugin');
module.exports = {
entry: {
// 번들 파일(bundle)의 시작 파일(Entry)을 jsx에서 tsx로 변경
'js/app': ['./src/App.tsx'],
},
output: {
path: path.resolve(__dirname, 'dist/'),
publicPath: '/',
},
module: {
rules: [
// Webpack(웹팩)에서 Typescript(타입스크립트)를 사용하기 위해 js|jsx를 ts|tsx로 수정 후 ts-loader를 추가
// ts-loader의 옵션은 성능 향상을 위해서
{
test: /\.(ts|tsx)$/,
use: [
'babel-loader',
{
loader: 'ts-loader',
options: {
transpileOnly: true,
},
},
],
exclude: /node_modules/,
},
],
},
plugins: [
new HtmlWebpackPlugin({
template: './src/index.html',
filename: 'index.html',
}),
// Typescript(타입스크립트)의 컴파일 속도 향상을 위한 플러그인을 설정
new ForkTsCheckerWebpackPlugin(),
],
};
루트 디렉토리
에tsconfig.json
을 만들고 아래와 같이 수정합니다.
{
"compilerOptions": {
"target": "es6",
"module": "esnext",
"moduleResolution": "node",
"noResolve": false,
"noImplicitAny": false,
"removeComments": false,
"sourceMap": true,
"allowJs": true,
"jsx": "react",
"allowSyntheticDefaultImports": true,
"keyofStringsOnly": true
},
"typeRoots": ["node_modules/@types", "src/@type"],
"exclude": [
"node_modules",
"build",
"scripts",
"acceptance-tests",
"webpack",
"jest",
"src/setupTests.ts",
"./node_modules/**/*"
],
"include": ["./src/**/*", "@type"]
}
루트 디렉토리
의 .babelrc
를 아래와 같이 수정합니다.
{
"presets": [
[
"@babel/preset-env",
{ "targets": { "browsers": ["last 2 versions", ">= 5% in KR"] } }
],
"@babel/react",
"@babel/typescript" // Typescript(타입스크립트)가 컴파일 가능하도록 추가
]
}
React
에서 Typescript
를 사용하기 위해 ./src/App.jsx
를 ./src/App.tsx
로 이름을 변경하고 아래와 같이 수정합니다.
import * as React from 'react';
import * as ReactDOM from 'react-dom';
interface Props {}
const App = ({ }: Props) => {
return <h1>Hello World!</h1>;
};
ReactDOM.render(<App />, document.getElementById('app'));
npm start
위의 명령어를 실행하고 인터넷 브라우저에서 http://localhost:8080/
로 들어가면 Hello World!가 보이면 정상적으로 잘 작동하는 것이다.
npm run build
그리고 빌드를 했을 때 dist
폴더가 생성되는 지 확인해주면 됩니다.
이전 프로젝트에 바로 진행을 해서 비교적 간단하게 적용을 할 수 있었다.
하지만 찾아보면 더 많은 설정 옵션들이 있으니 다른 옵션들도 적용해봐야할 것 같다.
굿바이~~
💡직접 읽어보면 뼈가 되고 살이 되는 출처
👉https://dev-yakuza.posstree.com/ko/react/typescript/