과거 1년전쯔음에 만들었던 프로젝트가 있었는데 CRA로 생성한 프로젝트였다.
Refactor를 위해 javascirpt에서 typescirpt로 바꾸고 React-query를 설치하려고 했는데 npm i 에서 에러가 났다.
react-script 패키지가 'typescript@4.x'를 요구하는것이다.
메세지에 --legacy-peer-deps옵션을 사용하는 방법이 있고 --force하는 방법도 있는데 두 방법 호환성을 억지로 맞추거나 아니면 보안에 취약한 선택인거 같아 첫째론 CRA github페이지에 들어가 보았다. 최신 commit이 작년이여서 방도를 몰라 GPT에게 물어본 결과 NEXT나 webpack 혹은 Vite를 사용하라는 결과가 나왔다.
기존 작업해 둔 것들이 있고 데이터베이스를 따로 사용하지 않아 Next로 바꾸는 것은 아닌것 같고 webpack으로 설정하면 너무나도 많은 설정이 있어 복잡해질것을 우려가 되어 빠르고 업그레이드 할 수 있는 Vite로 해결하는 것이 옳다고 판단이 들어 Vite를 설치 했다.
Vite
Vite, 차세대 프런트엔드 개발 툴
ko.vitejs.dev
Install
npm install vite
vite 설치 후 프로젝트의 파일경로들을 조금 수정하고 몇가지 파일도 생성을 해주어야 한다. 일단 파일경로를 살펴보면
CRA로 생성한 index.html은 public 폴더에 생성되는데 이 파일을 프로젝트 ROOT에 옮겨준다.
다음은 index.html에 있는 내용을 수정해주어야하는데 public에 관련된 파일 경로 (%PUBLIC_URL%)작성을 지워준다.
또한 body tag안에 script를 추가해 react가 시작되는 파일을 불러와주어야한다.
폴더경로
========
|public/
-| img/
--| main/
---| horse_icon_16.png
-| favicon.ico
-| manifest.json
|src
.
.
.
========
html 내부
========
<link rel="icon" href="/img/main/horse_icon_16.png" />
<body>
<div id="root"></div>
<script type="module" src="/src/index.tsx"></script>
</body>
vite.config.ts
다음 단계는 vite 설정파일을 만들어주는 것이다. 파일이름은 vite.config.ts이며 root에 위치해야한다.
그리고 인텔리센스 설정을 해준다. https://ko.vitejs.dev/config/#config-intellisense
Vite
Vite, 차세대 프런트엔드 개발 툴
ko.vitejs.dev
그리고 vite에서 react를 사용할 수 있게 plugin을 지정해준다.
server host를 원하는 번호로 입력해준다. 프록시 , cors, headers 등을 더 알고 싶으면 위 링크.
import {defineConfig} from "vite";
import react from "@vitejs/plugin-react";
export default defineConfig({
plugins: [react()],
server: {
port: 3000,
},
});
Environment Variables
CRA에서 env를 사용하기 위해서는 root에 .env 파일 내부에 REACT_APP_**이라고 변수를 만들어주어서 스크립트 내부에
process.env.REACT_APP_**라고 생성했었다. 하지만 vite에서는 process.env를 사용하기 위해서는 .env파일에 VITE_APP_***라고 생성해야며 사용시에는 import.meta.env.VITE_APP_***으로 사용되어야한다. 또한 typescript를 사용해 자동완성을 만들기 위해서는 src 폴더내에 vite-env.d.ts를 만들어 사용한다.
// src/vite-env.d.ts
/// <reference types="vite/client"/>
interface ImportMetaEnv {
readonly VITE_APP_OPEN_API_ENCODING_KEY: string;
readonly VITE_APP_API_KEY: string;
}
interface ImportMeta {
readonly env: ImportMetaEnv;
}
'React > ReactJS' 카테고리의 다른 글
2023/07/27__ReactJS(5) (0) | 2023.07.27 |
---|---|
2023/07/24__ReactJS(4) (0) | 2023.07.24 |
2023/07/21__ReactJS (0) | 2023.07.21 |
2023/07/20__ReactJS(3) (0) | 2023.07.20 |
2023/07/19__ReactJS(2) (0) | 2023.07.19 |