webpack 5 업그레이드 하면서 새로 알게된 내용
chanto11
·2021. 2. 16. 21:29
1. webpack-dev-server
webpack 5부터 webpack-dev-server 실행 명령어가 바뀌었습니다.
이전 명령어 실행 시 Error: Cannot find module 'webpack-dev-server/bin/cli-flags' 에러가 발생한다.
기존 명령어 : webpack-dev-server (--hot)
새로운 명령어 : webpack serve (--hot)
devServer의 dev옵션을 true로 하면 --hot 옵션만 이용한다는 뜻이다.
devServer: {
port: 8080,
contentBase: path.join(__dirname, 'public'),
// webpack serve --hot = only
hot: true,
proxy: {
'/api': {
target: 'http://localhost:5000',
changeOrigin: true,
},
},
},
2. core-js@3 버전 사용하여 polyfill 대체하기
// 설치하기 - 런타임 환경에서 동작해야하기 때문에 dev가 아닌 환경에 설치
npm install core-js regenerator-runtime
이전에는 .babelrc 에서 바벨 설정을 해주고 include 시켜줘야 했지만 이제는 webpack내부 옵션으로 지원한다고 한다.
useBuiltIns : 'usage' 를 사용하면 전역에 corejs와 regenerator를 선언해주지 않아도되고 소스에 사용된 것만 폴리필을 자동으로 넣어줘서 'usage' 옵션을 쓰는것을 추천한다고 한다.
[
'@babel/preset-env',
{
targets: {
browsers: ['last 2 versions', 'ie >= 11'],
},
debug: true,
modules: false,
// useBuiltIns : [entry(target에 맞춰서), usage(사용된것만), false]
useBuiltIns: 'usage',
// core-js@3 버전을 사용
corejs: 3,
},
],
3. modules 옵션 - 트리 쉐이킹
번외 - 자바스크립트 성능 개선을 위해서 코드 스플리팅(Code Splitting)은 자바스크립트를 청크 단위로 app을 분할하고, 청크를 필요로 하는 app의 경로에만 이 청크들을 배분하여 성능을 개선하는 기술이다. 그러나 이 기술을 사용하여도 사용되지 않는 코드를 줄이기 위해서 트리 쉐이킹이 사용된다.
트리 쉐이킹이란 애플리케이션의 트리구조에서 각 노드들은 특정 기능을 제공하는 디펜던시(의존성)를 가지고 있고 최신 모듈 시스템에서는 import 구문을 통해 정적 모듈의 특정 부분을 가져오는 이점을 사용해 문제를 해결하는 것이다.
import { useState, useCallback } from 'react';
다시 말해 최신 모듈 시스템을 유지시켜서 전체 모듈이 포함되는 것을 방지하고 최신 모듈 시스템을 사용하여
모듈의 특정부분만 가져오기 때문에 import 되지 않은 export를 "떨어 버리기(shake)" 위해서 webpack을 설정하고 빌드 결과물 크기를 더 작게 만들 수 있다.
[
'@babel/preset-env',
{
targets: {
browsers: ['last 2 versions', 'ie >= 11'],
},
debug: true,
// modules: false 트리쉐이킹 사용
modules: false,
useBuiltIns: 'usage',
corejs: 3,
},
],
4. include 와 exclude로 퍼포먼스 향상하기
적절하게 exclude와 include를 설정해주면 지정된 범위의 자원만 사용하기 때문에 퍼포먼스 향상에 도움이 된다. (권장)
...
...
test: /\.(js|jsx)$/,
loader: 'babel-loader',
// 적절하게 범위를 지정해주면 퍼포먼스에 도움이 된다.
exclude: /node_modules/,
include: path.resolve(__dirname, 'src'),
...
...