Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Vite] CRA에서 Vite로 변환하기 #41

Closed
bluelion2 opened this issue Oct 12, 2022 · 8 comments
Closed

[Vite] CRA에서 Vite로 변환하기 #41

bluelion2 opened this issue Oct 12, 2022 · 8 comments
Assignees
Labels
Bundle Webpack, Vite 등 관련 문제

Comments

@bluelion2
Copy link
Owner

bluelion2 commented Oct 12, 2022

✨ What?
발견된 이슈 간단히 정리하기

사내에서 쓰는 CRA + CRACO를 Vite로 변환하기

  • 업무 시간이 살짝 붕 떠서, 빌드 속도가 느려서, 커스텀하게 건드리기 어려워서, 다른걸 써보고 싶은 욕구 등등의 이유로 변환 시작

📚 캡쳐한 사진들

@bluelion2 bluelion2 added the Bundle Webpack, Vite 등 관련 문제 label Oct 12, 2022
@bluelion2 bluelion2 self-assigned this Oct 12, 2022
@bluelion2
Copy link
Owner Author

진행

  • index.html, manifest.json root로 이동
  • vite.config.js 생성 및 기본옵션 정의
    • yarn create vite test --template react-ts 로 생성한 기본 옵션 참고

@bluelion2
Copy link
Owner Author

이슈1

내부에서 쓰는 mqtt라이브러리에서 이슈 발생

  • buffer is not defined

기존 craco 옵션을 보니 webpack에서 polyfill 옵션 적용 확인함.

@bluelion2
Copy link
Owner Author

bluelion2 commented Oct 12, 2022

vite dev 환경은 내부적으로 esbuild를 이용해서 빌드함.

esbuild옵션을 줄 수 있는데, 거기서 polyfill 적용함으로써 mqtt를 사용함.

optimizeDeps: {
    esbuildOptions: {
      define: {
        global: 'globalThis',
      },
      plugins: [
        // mqtt를 위한 buffer, process polyfill
        NodeGlobalsPolyfillPlugin({
          buffer: true,
          process: true,
        }),
      ],
    },
  },

  • rollup과 esbuild의 역할

참고


추가

  • Esbuild상에 이슈일 뿐, vite가 production 빌드하는데 쓰이는 rollup에서는 이슈가 발생하지 않음 -> esBuild 제거
  • Vite에서 production build에 esbuild를 안쓰기 떄문에 무시
  • 추가적인 rollup 옵션 변환은 rollupOption을 수정하기.

참고

@bluelion2
Copy link
Owner Author

img file 경로 이동

  • /public/assets 하위에 있던 이미지들을 /public/images로 이동함.
  • vite 기본 img 경로가 /public/images 셋팅이기에 + assets에서 분리하서 관리하고자 config에서 변경하는거보다 그냥 옮김
    • TODO - img를 s3로 이동시키기

@bluelion2
Copy link
Owner Author

bluelion2 commented Oct 12, 2022

rollup-plugin-visualizer를 통해서 결과물 사이즈 측정하기

import { visualizer } from 'rollup-plugin-visualizer'


export default defineConfig({
  plugins: [
    react({
      // Emotion css
      jsxImportSource: '@emotion/react',
      babel: {
        plugins: ['@emotion/babel-plugin'],
      },
    }),
    // 빌드할 때마다 file을 생성함.   
    visualizer({
       file: 'bundle.html',
    }),
   ..... 
  ]

@bluelion2
Copy link
Owner Author

bluelion2 commented Oct 12, 2022

process.env is not defined Issue

vite에서는 porcess.env를 그냥 쓸 수는 없음.
vite.config.js에서 define 옵션에서 수정해주거나, import.meta.env 로 사용해야함.

console.log(import.meta.env)를 찍을 때 - (import.meta.url 무시)

스크린샷 2022-10-11 오후 5 21 51


추가

@bluelion2
Copy link
Owner Author

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Bundle Webpack, Vite 등 관련 문제
Projects
None yet
Development

No branches or pull requests

1 participant