회사에서 웹뷰 작업을 하고 있는 나는 모바일 환경에서 내가 원했던것과 다르게 구현되는 현상을 자주 겪는다. 해결이 되었는지 확인을 하기 위해서는 개발서버에 배포해서 모바일 환경에서 확인하는건데 한번 빌드할때마다 몇십초를 기다려야하니 답답함이 느껴졌다. 그래서 지금 환경을 개선할 수 있는 방법이 없을까 찾아보다가 Vite존재를 알게 되었고 도입하기 전 기술공부를 하였다.
Vite는 프론트엔드 툴로 싱글스레드 환경에서 돌아가는 Webpack을 사용하지 않고 개발서버와 프로덕션 빌드를 위해 각각 esbuild와 Rollup을 사용하여 속도를 유의미하게 개선시켜준다.
그리고 마이그레이션을 이미 진행한 다른 개발자분들의 글을 많이 찾아보았는데 과정이 복잡하지 않고 만족도도 높아서 바로 마이그레이션을 진행하였다.
npm install -D vite @vitejs/plugin-react // npm 버전
yarn add -D vite @vitejs/plugin-react // yarn 버전
"scripts" : {
"start" : "vite"
"build" : "vite build"
}
<body>
<div id="root"></div>
<script type=”module” src=”/src/index.tsx”></script>
</body>
npm install -D vite-tsconfig-paths vite-plugin-env-compatible @sentry/vite-plugin
import { defineConfig } from "vite";
import react from "@vitejs/plugin-react";
import viteTsconfigPaths from "vite-tsconfig-paths";
import envCompatible from "vite-plugin-env-compatible";
import { sentryVitePlugin } from "@sentry/vite-plugin";
export default defineConfig({
envPrefix: "REACT_APP_", // 환경변수 prefix 변경
plugins: [
react(),
viteTsconfigPaths(),
envCompatible(),
sentryVitePlugin({
authToken: ""
project: "project name",
sourcemaps: {
ignore: ["node_modules"],
},
}),
],
server: {
open: true, // 서버 시작 시 브라우저 앱 자동으로 열기
port: 8000, // 기본 포트
},
build: {
sourcemap: true
},
});
envCompatible 플러그인으로 인해 기존의 REACTAPP은 변경하지 않아도 되지만 불러오는 방식은 process.env 에서 import.meta.env로 변경해주어야 한다.
from
/// <reference types="react-scripts" />
to
/// <reference types="vite/client" />
{
"compilerOptions": {
"target": "es5",
"lib": ["dom", "dom.iterable", "esnext"],
"allowJs": true,
"skipLibCheck": true,
"esModuleInterop": true,
"allowSyntheticDefaultImports": true,
"strict": true,
"forceConsistentCasingInFileNames": true,
"noFallthroughCasesInSwitch": true,
"module": "esnext",
"moduleResolution": "node",
"resolveJsonModule": true,
"isolatedModules": true,
"noEmit": true,
"jsx": "react-jsx",
"sourceMap": true,
"inlineSources": true,
"sourceRoot": "/",
"baseUrl": "src",
"types":["vite/client"]
},
"include": ["src"]
}
rm -rf node_modules
npm i
632ms 이라는 엄청난 속도.. ✨
이전에는 build만 50초대로 걸려서 타임로스가 꽤나 있었다.
하지만 Vite로 변경후 15s라는 어마무시한 속도를 확인 할 수있었다..!!
Vite로 마이그레이션하기로 결정하고 공부하며 번들러의 역사와 왜 Webpack이 느린지, 그리고 왜 esbuild가 엄청나게 빠른 속도를 낼 수 있었는지 등을 알 수 있어 굉장히 유익했다.
또한 어렵지 않은 마이그레이션 과정과 마이그레이션 후 체감되는 엄청난 속도는 정말 200%만족의 경험을 한 것 같다.
물론 CRA가 Vite를 기본 번들러로 채택하기는 힘들겠지만 (이 글을 읽어보면 알 수 있다!) 마이그레이션 과정이 복잡하지 않기 때문에, 점진적으로 다른 프로젝트에도 적용시켜 나갈 예정이다.