Webpack Guide 링크
webpack is used to compile JavaScript modules.
웹팩 공식 Getting started의 첫 문장이다.
Getting started
기존 html head 태그에서 관리되던 <script src="https://unpkg.com/lodash@4.16.6"></script>
lodash의 다운로드 스크립트를 node npm을 통해 다운로드 하여 js 파일에 import _ from 'lodash';
명시 함으로써 global scope pollution
을 없애고 점점 복잡해 지는 모던 자바스크립트의 모듈 의존성을 도와줄 것이라는 말과 간단한 webpack.config.js
의 소개로 끝난다.
Asset Management
loader
들을 통해 다른 종류의 데이터들을 js 파일 안에 종속 시킴으로써 의존성 관리를 도와준다는 내용. 번들링하는 과정에서 알아서 처리되어 서비스할때 제공된다.
Output Management
webpack.config.js
를 통한 1개의 번들 파일이 아닌 여러개로 컨트롤 할 수 있다는 것을 보여주고 번들 파일의 갯수에 따라 html 파일을 자동 생성해주는 html-webpack-plugin
, 쓰고있는 파일만 정리하고 캐싱관리도 가능한 clean-webpack-plugin
을 소개하고 마무리된다.
Development
디버깅환경에 대한 솔루션을 제공한다. 웹팩의 기본 설정인 inline-source-map
과 webpack-dev-server
, webpack-dev-middleware
으로 자신의 개발환경을 커스터마이징 할 수 있도록 도와주는 플러그인을 소개한다.
Code Splitting
조금 부족한 느낌이 들어 갓로퍼트님 리액트 프로젝트 코드 스플리팅 정복하기 실습을 진행하고 왔다. webpack v4 부터 지원하는 dynamic import 기능으로 모듈을 비동기적으로 불러와 사용 할 수 있도록 도와준다(Promise 리턴). 서버사이드 랜더링, 라우터 코드스플리팅을 동시에 제공함 있어 생기는 문제들도 소개하고 어떻게 해결하는지 보여준다. 이 부분은 서비스 하는데 있어, 그리고 최적화에 있어 중요한 부분이기 때문에 따로 공부해 봐야겠다. 글이 2018년 글이기 때문에 현재 다른 솔루션들이 생겼는지도 찾아봐야 한다.
Caching
리소스 이름으로 캐싱을 하는 브라우저에게 파일에 변경이 있다고 알려주기 위해 리소스 이름에 contentHash
기능을 통해 이를 방지하는 방법(캐시 버스팅)을 알려준다. 그리고 node_module
의 외부 의존 라이브러리들만 따로 vendors
번들에 담아 캐싱 할 수 있도록 하는 방법도 알려준다!
Authoring Libraries
라이브러리 메이커들에게 웹팩을 쓰면 좋은 점들을 제시한다. => 라이브러리 만들어 볼 때 참고해야 할듯
Environment Variables
production과 development 환경을 나누기 위한 webpack environment variables 사용법을 알려준다.
webpack --env.NODE_ENV=local --env.production --progress
// webpack.config.js
const path = require('path');
module.exports = env => {
// Use env.<YOUR VARIABLE> here:
console.log('NODE_ENV: ', env.NODE_ENV); // 'local'
console.log('Production: ', env.production); // true
return {
entry: './src/index.js',
output: {
filename: 'bundle.js',
path: path.resolve(__dirname, 'dist'),
},
};
};
Build Performance
웹팩의 빌드 속도를 높이기 위해 해야하는 Best practice들을 소개한다.
Content Security Policies
CSP에 대한 내용
Development - Vagrant
Vagrant위에 webpack을 띄우는 방법과, 데브환경을 프로덕션 환경에 가깝게 만들기 위해 webpack-dev-server와 nginx를 함께 쓰는 방법을 소개한다.
그 외 모듈을 import 하고 사용하지 않으면 의존성에서 제외해주는 Tree shaking
에 대한 설명이나 Typescript와 함께 사용하는 방법 등을 알려준다. 어마어마하게 많은 기능들이 있기 때문에 하나하나 사용해 보면서 익혀야겠다!