프론트엔드 개발자라면 반드시 알아야 하는 웹팩
나는 그동안 그냥 "웹팩이.. 대충 묶는 도구 아니야..?" 라고 알고 있었다 ㅎ
그리고 그렇게 알고 개발을 했고, 놀랍게도 그동안 특별한 문제는 없었다..
머.. 모르고 대충 살아도 크게 지장은 없지만 ..
정확하게 웹팩이 뭔지 왜 쓰이는지 알아보려고 한다.
왜냐면 누가 웹팩에 대해서 물어보면 멋있게 설명해주고 싶기때문~
모듈, 번들러, 웹팩, 로더를 아라보자
모듈 어떻게 쓰지요? 🤨
// main.html
<script src="./배우.js"></script>
type
을 module
로 정해준 뒤,import
해주면 된다.export
해줘야 한다.// main.html
<script type="module">
import 배우_소희 from 배우.js;
import 가수_소희 from 가수.js;
</script>
// 배우.js
var 소희 = "한소희";
export default 소희;
// 가수.js
var 소희 = "안소희";
export default 소희;
모듈 뭐가 문제야 🤨
그래서 웹팩이 뭔데 🤨
번들러
- Bundle은 묶는다는 뜻!
- 번들러는 여러 가지 파일을 묶는 도구라는 뜻! 🎀
- 여러 번들러가 있지만 그 중에서 제일 인기 많은 번들러는 웹팩이다.
- WebPack, Broserify, Parcel ..
아니 파일들을 왜 묶는데 🤨
왜 묶는지 알기 전에 내가 진행했던 프로젝트를 함 보자
mbti.. 과몰입러로써 함.. 만들어봤던 사이트다.
크롬 개발자 도구의 네트워크 탭을 보면, 이 페이지를 로딩할 때 어떤 데이터를 다운 받았는지 알 수 있다.
이게 왜 나쁜디? 🤨
웹팩을 사용해야 하는 이유 🤨
🚨 그럼.. 웹에서도 모듈을 사용하고, 여러 파일을 묶어서 사용할 수 있는 방법은 없는걸까?
$ node --version
// 버전이 뜬다면 설치가 잘 되었다는 뜻!
node를 설치했다면 npm 커맨드를 사용할 수 있다.
npm 커맨드를 이용해 현재 디렉토리를 node.js 프로젝트로 만들자
$ npm init
// package.json이 생겼을 것이다.
$ npm install -D webpack webpack-cli
프로젝트에 설치한 웹팩을 사용할 땐 npx
커맨드를 사용할 것이다.
웹팩을 통해 묶은 js 파일은 public 폴더에 넣어줄 것이다.
$ npx webpack --entry ./pagelink.js --output-path ./public/question_bundle.js
못보던 키워드가 나와도 당황하지 말자. 쥔짜 쉬움
⭐️--entry
: 내가 묶을 파일의 경로
⭐️ --output-path
: 내가 묶은 js를 어디에 저장할지
참고로 생활코딩 강의에선 그냥 --output
명령어로도 됐는데 이젠 안되는 것 같다.
버전이 업그레이드 되면서 생긴 차이 같다. (웹팩 버전 4 ↔️ 5 차이인듯!)
-o
나 --output-path
를 사용하면 잘 동작한다.
$ npx webpack --help
Usage: webpack [entries...] [options]
Alternative usage to run commands: webpack [command] [options]
The build tool for modern web applications.
Options:
...
--entry <value...>
The entry point(s) of your application e.g. ./src/main.js.
-o, --output-path <value>
Output location of the file generated by webpack e.g. ./dist/.
이렇게 매번 코드를 입력하는 건 좀 귀찮다. 그래서 나온 게 config 파일
이다.
webpack 의 공식 문서에 친절하게 가이드가 적혀있다.
//webpack.config.js
const path = require("path");
module.exports = [
{
entry: "./pagelink.js",
output: {
path: path.resolve(__dirname, "public"),
// __dirname = webpack.config.js 파일이 위치한 경로
// public : output을 가져다 놓을 경로
filename: "question_bundle.js",
},
mode: "development",
// 어떤 모드로 웹팩 옵션을 지정할지 정할 수 있음
},
];
$ npx webpack --config webpack.config.js
또는
$ npx webpack
// 디폴트가 webpack.config.js임!
그래서 웹팩 이게 끝인가?
- 어림없지 웹팩의 꽃, 로더가 남았다.
웹팩의 핵심개념!
$ npm install --save-dev style-loader css-loader
// pagelink.js
import question_style from "./Style/question_style.css";
...
export {... , question_style};
const path = require("path");
module.exports = [
{
entry: "./pagelink.js",
output: {
path: path.resolve(__dirname, "public"),
// __dirname = webpack.config.js 파일이 위치한 경로
// public : output을 가져다 놓을 경로
filename: "question_bundle.js",
},
mode: "development",
// 추가된 부분!
module: {
rules: [
{
test: /\.css$/i,
use: ["style-loader", "css-loader"],
},
],
},
},
];
🔗 생활코딩 웹팩