목차
프론트엔드 개발자를 위한 웹팩을 수강하며 정리한 글입니다.
참고 자료
npm
- Node Package Manager의 약어
- Javascript Library를 관리해 주는 도구
- npm Homepage
장점
- 쉬운 버전 관리
- 기존 script 태그를 찾아 일일이 버전 정보 수정
- npm package.json 파일에서 모든 라이브러리 버전 정보 관리 가능
- import 정보 찾는 과정 생략
- 기존 script 태그 내 src 등의 입력값을 인터넷에서 검색해 입력
- npm install 명령어로 검색 없이 라이브러리 설치
초기화 (init)
npm init #초기화
npm init -y #기본값으로 초기화 (추천)
- package.json 생성
지역 설치 (install)
npm install {라이브러리 이름}
npm i {라이브러리 이름}
- node-modules 폴더 내 라이브러리 폴더 생성
- package.json 내 의존성 추가
- Options
- --save-dev -D devDependencies에 추가 (개발용 라이브러리, 보조용으로 개발 시 필요)
- --save-prod dependencies에 추가 (배포용 라이브러리, 프로젝트 동작 시 필요)
- npm run build devDependencies 미설치, dependencies만 설치
제거 (uninstall)
npm uninstall {라이브러리 이름}
전역 설치 (--global)
npm install {라이브러리 이름} --global
npm install {라이브러리 이름} --g
- 프로젝트가 아닌 시스템 레벨에서 사용할 라이브러리
- "라이브러리 이름"으로 된 명령어 사용 가능 (명령어가 존재하는 경우)
- 설치된 경로
- Windows %USERPROFILE\AppData\Roaming\npm\node_modules
- Mac /usr/local/lib/node_modules
Webpack
최신 프론트엔드 프레임워크에서 가장 많이 사용되는 Module Bundler
- Module Bundler
- 웹 애플리케이션을 구성하는 자원(HTML, CSS, Javascript 등) = Module
- Module을 조합해 하나의 결과물을 만드는 도구
- Module Bundling
- 웹 애플리케이션을 구성하는 여러 자원을 하나의 파일로 병합 및 압축
- 공식 문서 https://webpack.js.org/concepts/
실행 방법
npm i webpack webpack-cli # webpack, webpack-cli 설치
# package.json에 아래 설정 추가
"scripts": {
"build": "webpack"
}
npm run build # build 실행
속성 설정
webpack --mode=none --entry=src/index.js --output=public/output.js
// webpack.config.js
var path = require("path"); // path 라이브러리 사용
var MiniCssExtractPlugin = require("mini-css-extract-plugin"); // CSS 파일 별도 추출
module.exports = {
mode: "none",
entry: "./src/index.js", // 최초 진입점
output: { // webpack 결과물 저장 정보
filename: "main.js",
path: path.resolve(__dirname, "dist"),
},
module: { // loader 설정
rules: [
{
test: /\.css$/,
use: [
{ loader: MiniCssExtractPlugin.loader },
'css-loader'
] // 순서도 중요, 오른쪽에서 왼쪽으로 적용
}
]
},
plugins: [
new MiniCssExtractPlugin() // CSS 파일도 빌드 결과물에 포함
]
};
성능상 장점
- Webpack 적용 후, 개발자 도구 > Network 창 확인
- 서버에 요청해서 받아오는 파일 수가 적어, 요청 시간이 줄어든다는 장점
Babel
Javascript 최신 문법(ES6 등)을 많은 브라우저가 읽을 수 있는 문법으로 변환해 주는 도구
Source Map
- Webpack으로 Bundling 처리된 Javascript는 보기 어려운 상태
- 그러면 개발 시 디버깅이 힘들기 때문에, 빌드 결과물과 원본 파일을 연결해 주는 기능 지원
- webpack.config.js에서 devtool: 'source-map' 설정
주요 속성
entry
- 앱 자원을 변환하기 위해 필요한 최초 진입점, Javascript 파일 경로
- 웹 애플리케이션의 전반적인 구조와 내용이 담겨 있는 파일로 지정
- 여러 개 설정 가능 (MPA에 적합)
output
- Webpack 실행 후의 결과물을 저장할 파일 경로
loader
- 웹 자원(HTML, CSS, Images 등)을 변환할 수 있도록 도와주는 속성
plugin
- 기본적인 동작에 추가적인 기능을 제공 (ex. 결과물에 대한 정보를 변형)
- 생성자 함수로 생성한 객체 인스턴스만 추가 가능
resolve
- 파일 간의 연관 관계를 해석하는 방법
- extensions에 정의된 확장자는 import문에서 확장자를 표기하지 않아도 OK
Dev Server
- 기존에는 코드를 바꿀 때마다 다시 build 후 server를 실행하는 과정 반복 → 번거로움
- 코드만 변경하고 저장하면, 자동으로 빌드 후 브라우저를 새로고침 해주는 기능
- 빌드 결과물을 프로젝트 폴더에서 확인 불가
- 인 메모리에 빌드 결과물을 저장
- 파일을 생성하고 읽는 것보다 메모리에 쓰고 읽는 것이 시간, 공간 효율적
// package.json
{
"scripts": {
"dev": "webpack-dev-server"
}
}
// webpack.config.js
module.exports = {
devServer: {
port: 9000,
}
}
반응형