npm + webpack 빠르게 시작
웹팩으로 프로젝트를 해보고자 할 때, 빠르게 시작할 수 있도록 도움이 되고자 하는 글입니다. 주로 [인프런] 장기효님의 프론트엔드 개발자를 위한 웹팩 강의 를 참고하였습니다.
npm (Node Package Manager)#
웹팩을 이해하기 전에 npm 구조부터 이해하는 것이 좋음
- 기본 런타임 환경이 Node
 - 자바스크립트 패키지 관리 매니저
 - 웹팩을 사용할려면 필수적으로 npm 으로 프로젝트를 관리하게 됨
 - 특징
package.json으로 패키지 버전 의존성 관리가 용이해짐- cdn으로 가져오지 않고 필요한 라이브러리를 로컬에 설치해서 사용가능하게 됨
 
 
npm project 생성#
패키지 install, uninstall#
install을 하게 되면 해당 패키지가 package.json 에 추가되게 됨
지역 패키지 설치#
전역 패키지 설치#
- 전역 설치하게 되면 지역 프로젝트의 
pakcage.json에 추가하지 않고, 로컬 장비의 전역 Npm 에 설치하게됨 
dependencies, devDependencies#
dependencies: 일반적으로 설치 or--save-prod로 했을 때 추가됨- 앱 로직 직접적으로 관련 (배포용)
 
devDependencies:--save-dev옵션으로 설치하게 되면 package.json의devDependencies로 추가됨- 개발 보조 라이브러리 (개발용)
 - build 후 배포 시, 배포되지 않는 라이브러리
 
일단 webpack 프로젝트 만들어보기#
실습#
commands#
webpack.config.js#
웹팩 옵션을 커맨드 라인으로 일일이 넣기엔 너무 많아 webpack.config.js 로 관리됨
webpack#
- 모듈 번들러
 - 장점
- 번들링이 되면 파일들이 줄어들어, 페이지 요청을 줄일 수 있음
 
 
모듈 번들링?#

- 웹 앱을 구성하는 자원(html, css, js, images, font 등) 들을 하나로 합쳐줌
 - 여러개로 나눠진 자원, 모듈들을 하나의 파일로 만들어주는 과정
 
웹팩 등장 배경 및 해결하려는 문제#
등장 배경#
웹팩은 기본적으로 필요한 자원은 미리 로딩하는게 아니라, 필요 시점에 요청하자는 철학을 가지고 있음
- 파일 단위의 자바스크립트 모듈 관리의 필요성
- 바닐라 자바스크립트가 다른 파일 스코프 관리가 되지 않고 있었음
 
 - 웹 개발 작업 자동화 도구 (Web Task Manager)
- html, css, js 압축
 - 이미지 압축
 - css 전처리기 변환
 
 - 웹 앱의 빠른 로딩 속도와 높은 성능
- 모듈 레이지 로딩까지 가능
 
 
해결하려는 문제#
- 자바스크립트 변수 유효 범위
 - 브라우저별 HTTP 요청 숫자의 제약
- 최대 TCP 연결 개수의 제약
 
 - 사용하지 않는 코드 관리
 - 모듈 Dynamic Loading & Lazy Loading 미지원 -> 지원할 수 있도록
 
Babel#
- JavaScript compiler
- 최대한 많은 브라우저에 지원되는 자바스크립트로 트랜스 파일링 (컴파일) 해줌
 
 
sourcemap#
- 빌드 결과물을 로딩했는데 
sourcemap기능으로 해당 원본 파일을 브라우저 디버깅창에서 확인할 수 있음