본문 바로가기
SPA/React

[React] CRA 사용하지 않고 타입 스크립트 개발환경 세팅하기

by J4J 2022. 2. 16.
300x250
반응형

안녕하세요. J4J입니다.

 

이번 포스팅은 CRA 사용하지 않고 타입 스크립트 개발환경 세팅하는 방법에 대해 적어보는 시간을 가져보려고 합니다.

 

 

 

개발환경 세팅 방법

 

[ 1. 작업할 폴더 생성 및 이동 ]

 

VSCode 터미널을 이용하여 다음 명령어를 통해 작업 폴더를 생성해주시면 됩니다.

 

$ mkdir { 폴더 명 } // ex) mkdir init_typescript
$ cd { 폴더 명 } // ex) cd init_typescript

 

 

 

[ 2. package.json 생성 ]

 

$ npm init

 

 

 

명령어를 입력하면 부가 정보들을 추가적으로 작성해줘야 합니다.

 

필요한 내용들에 대해 입력해주시면 되고 괄호가 있는 곳은 아무것도 입력하지 않을 경우 괄호 안의 내용이 default로 입력이 됩니다.

 

package name: (init_typescript)
version: (1.0.0)
description: input description
entry point: (index.js)
test command:
git repository:
keywords:
author:
license: (ISC)

 

 

 

입력이 완료되면 다음 문구가 나오는데 엔터를 눌러주시면 됩니다.

 

Is this OK? (yes)

 

 

반응형

 

 

[ 3. React 패키지 설치 ]

 

React를 이용해 개발할 수 있도록 도와주는 패키지들을 다음과 같이 설치해주시면 됩니다.

 

$ npm install react react-dom
$ npm install -D @types/react @types/react-dom

 

 

 

[ 4. TypeScript 패키지 설치 및 설정]

 

TypeScript를 이용해 개발할 수 있도록 도와주는 패키지들을 다음과 같이 설치해주시면 됩니다.

 

$ npm install -D typescript ts-node

 

 

 

또한 TypeScript 사용을 위한 추가적인 설정 파일을 생성해줘야 합니다.

 

다음 명령어를 이용하여 설정 파일인 tsconfig.json 파일을 생성해주면 됩니다.

 

$ npx typescript --init

 

 

 

만들어진 tsconfig.json 파일을 확인하여 필요한 설정들을 추가적으로 해주시면 됩니다.

 

저는 다음과 같이 설정하도록 하겠습니다.

 

{
  "compilerOptions": {
    /* Basic Options */
    "target": "es5",
    "module": "ESNext",
    "lib": ["ES2015", "ES2016", "ES2017", "ES2018", "ES2019", "ES2020", "DOM"],
    "jsx": "react",
    "declaration": true,
    "outDir": "./build",

    /* Strict Type-Checking Options */
    "strict": true,
    "noImplicitAny": true,

    /* Module Resolution Options */
    "moduleResolution": "node",
    "esModuleInterop": true,

    /* Advanced Options */
    "skipLibCheck": true,
    "forceConsistentCasingInFileNames": true
  },
  "exclude": ["node_modules"],
  "include": ["./src/**/*"]
}

 

 

 

설정을 하고나면 tsconfig.json 파일에 계속 빨간불이 켜져 있을 수도 있습니다.

 

사용되는 경로 (ex, ./src/**/*)가 현재 존재하지 않아서 그러는데 아래의 모든 설정을 마치고 VSCode를 재시작해주면 빨간불이 사라집니다.

 

 

 

[ 5. webpack 패키지 설치 및 설정 ]

 

모듈 번들러의 역할을 해주는 webpack을 다음과 같이 설치해주시면 됩니다.

 

$ npm install -D webpack webpack-cli html-webpack-plugin webpack-dev-server ts-loader

 

 

 

webpack도 추가적인 설정 파일을 생성해줘야 합니다.

 

폴더 최상단에 webpack.config.js 파일을 생성해주고 다음과 같이 입력해주시면 됩니다.

 

const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');

module.exports = {
    // 개발모드, development or production
    mode: 'development',

    // entry를 기준으로 연관된 모든 파일들을 번들링
    entry: './src/index',

    // 번들링 될 파일 확장자 등록
    resolve: {
        extensions: ['.js', '.jsx', '.ts', '.tsx'],
    },

    // 로더 등록
    module: {
        rules: [
            {
                test: /\.tsx?$/,
                use: ['ts-loader'],
                exclude: ['/node_modules/'],
            },
        ],
    },

    // 빌드 설정
    output: {
        path: path.resolve(__dirname, 'build'), // 빌드되는 파일들이 만들어지는 위치, __dirname: 현재 디렉토리
        filename: 'bundle.js', // 번들파일 이름
    },

    // webpack 서버 설정
    devServer: {
        static: path.join(__dirname, 'build'), // 이 경로에 있는 파일이 변경될 때 번들을 다시 컴파일
        port: 8088,
    },

    plugins: [
        new HtmlWebpackPlugin({
            // index.html에 output에서 만들어진 bundle.js를 적용하여, build에 새로운 html 파일 생성
            template: `./public/index.html`,
        }),
    ],
};

 

 

728x90

 

 

[ 6. package.json 수정 ]

 

위에서 설정한 webpack을 이용하여 작성된 코드들이 실행되고 또한 빌드될 수 있도록 다음과 같이 package.json의 scripts 부분을 수정해주시면 됩니다.

 

{
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "dev": "webpack-dev-server --open",
    "build": "webpack --config webpack.config.js"
  },
}

 

 

 

[ 7. 초기 파일 구성 ]

 

초기 파일들은 index.html, App.tsx, index.tsx로 총 3개의 파일로 구성되어 있습니다.

 

 

 

  • index.html

폴더 최상단에 public 폴더를 생성해주고 그 안에 index.html을 생성해줍니다.

 

내용은 다음과 같이 작성해주시면 됩니다.

 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div id="root"></div>
</body>
</html>

 

 

 

  • App.tsx

폴더 최상단에 src 폴더를 생성해주고 그 안에 App.tsx를 생성해줍니다.

 

내용은 다음과 같이 작성해주시면 됩니다.

 

import * as React from 'react';

const App = (): JSX.Element => {

    // let myNumber: number = '23'; // 정의된 타입에 맞는 데이터가 아니어서 에러 발생

    return (
        <div>
            <p>Hello, React!</p>
            <p>Hello, Typescript!</p>
        </div>
    )
}

export default App;

 

 

 

여기서 주석처리 되어 있는 부분을 제거했을 때 타입 에러가 발생되어야 정상적으로 TypeScript가 적용되어 있는 상태입니다.

 

타입 에러

 

 

 

  • index.tsx

위에서 만들어 둔 src 폴더 안에 index.tsx 파일을 생성해줍니다.

 

내용은 다음과 같이 작성해주시면 됩니다.

 

import * as React from 'react';
import ReactDom from 'react-dom';
import App from './App';

ReactDom.render(<App />, document.querySelector('#root'));

 

 

 

[ 8. 번외 ]

 

만약 4번에서 TypeScript를 설정하시고 나서 tsconfig.json에 빨간불이 켜져 있으신 분은 VSCode를 재시작해주시면 됩니다.

 

그러면 tsconfig.json에 빨간불이 사라지는 걸 확인할 수 있습니다.

 

 

 

 

서버 실행

 

위의 모든 설정이 완료되었다면 다음 명령어를 이용하여 작성된 코드들을 실행시켜줄 수 있습니다.

 

$ npm run dev

 

 

 

다음과 같이 결과가 나오면 됩니다.

 

실행 결과

 

 

 

빌드

 

작성된 파일들을 배포하기 위해 빌드할 때는 다음 명령어를 사용해주시면 됩니다.

 

$ npm run build

 

 

 

정상 동작이 될 경우 폴더 최상단에 build라는 폴더가 생성될 것이고 내부에 빌드된 파일들이 다음과 같이 생성됩니다.

 

빌드 결과

 

 

 

파일 구성

 

파일 구성

 

 

 

 

 

 

 

 

이상으로 CRA 사용하지 않고 타입 스크립트 개발환경 세팅하는 방법에 대해 간단하게 알아보는 시간이었습니다.

 

읽어주셔서 감사합니다.

 

 

 

728x90
반응형

댓글