반응형
250x250
Notice
Recent Posts
Recent Comments
Link
관리 메뉴

짧은코딩

배포하기 본문

인프런, 유데미/Slack 클론 코딩

배포하기

5_hyun 2022. 8. 1. 16:53

배포

-webpack-bundle-analyzer  

npm i webpack-bundle-analyzer
npm i -D @types/webpack-bundle-analyzer

이걸 깔아서 사용한다.

프론트엔드 개발자라면 webpack에 bundle-analyzer을 까는게 좋다. 왜냐하면 용량을 확인할 수 있기 때문이다. 그래서 배포 전 압축했을 때 용량을 확인할 수 있다.

 

이것은 개발 모드와 배포 모드로 나눠서 사용해야 한다.

if (isDevelopment && config.plugins) {
  config.plugins.push(new webpack.HotModuleReplacementPlugin());
  config.plugins.push(new ReactRefreshWebpackPlugin());
  config.plugins.push(new BundleAnalyzerPlugin({ analyzerMode: 'server', openAnalyzer: true }));
}

이 서버는 배포 모드가 아닐 때도 실행된다. if문 안에 마지막 줄의 openAnalyzer를 true로 바꾸면

이런 화면이 나오게된다. 마우스를 올리면 용량을 확인할 수 있다.

 

배포 시작

if (isDevelopment && config.plugins) {
  config.plugins.push(new webpack.HotModuleReplacementPlugin());
  config.plugins.push(new ReactRefreshWebpackPlugin());
  config.plugins.push(new BundleAnalyzerPlugin({ analyzerMode: 'server', openAnalyzer: true }));
}
if (!isDevelopment && config.plugins) {
  //요즘은 아래 한 줄 코드가 필요가 없는데 옛날 플로그는 최적화 시켜줄 수 있다.
  config.plugins.push(new webpack.LoaderOptionsPlugin({ minimize: true }));
  config.plugins.push(new BundleAnalyzerPlugin({ analyzerMode: 'static' }));
}

 

여기서 주의할 점은 NODE_ENV가 production일 때 배포 모드이다.

-package.json

    "build": "cross-env NODE_ENV=production TS_NODE_PROJECT=\"tsconfig-for-webpack-config.json\" webpack",

따라서 build에다가 NODE_ENV=production이라고 적어줘야 한다.

 

이렇게 하고

npm run build

이걸 한다.

 

이런 화면이 뜬다.

마우스를 올리면 Gzipped size인 압축된 용량도 볼 수 있다.

 

-tree-shaking

용량이 너무 크면 코드 스플리팅 같은 기법으로 줄일 수 있다. 다른 방법으로는 tree-shaking이 있다. 이것은 위 사진에서 보듯이 컴포넌트가 큰 것도 있고 작은 것도 있다. 큰거에서는 이걸 잘게 쪼갤 수 있나 보는 것이고 작은거에서는 쓸모없는 것을 나뭇잎 처럼 털어낼 수 있나 보는 것이다. 보통 쓸모없는 이미지나 폰트를 많이 털어낸다.

따라서 만약 react-mentions가 용량이 커서 털고 싶으면 구글에 react-mentions tree-shaking을 검색해서 나오면 털 수 있는거고 안나오면 못 터는 것이다.

 

결론적으로는

이렇게 나온 dist 파일들과, index.html 파일을 백엔드에 갖다줘야 한다.

728x90
반응형
Comments