WEBPACK

์„œ๋ฒ„์—์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ๋กœ์ง์„ JavaScript๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๋ถ€๋ถ„์ด ๋งŽ์•„์ง€๋ฉด์„œ ์›น ์„œ๋น„์Šค ๊ฐœ๋ฐœ์—์„œ JavaScript๋กœ ์ž‘์„ฑํ•˜๋Š” ์ฝ”๋“œ ์–‘๋„ ๋Š˜์–ด๋‚ฌ๋‹ค. ํ•˜๋‚˜์˜ ํŒŒ์ผ๋กœ ๊ด€๋ฆฌํ•˜๋Š”๋ฐ๋Š” ํ•œ๊ณ„๊ฐ€ ์ƒ๊ฒผ์œผ๋ฉฐ, ์—ฌ๋Ÿฌ๊ฐœ ํŒŒ์ผ์„ ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋กœ๋”ฉํ•˜๋Š” ๊ฒƒ์€ ๊ทธ๋งŒํผ ๋น„์šฉ์ด ๋ฐœ์ƒํ•˜๋ฉฐ, ํŒŒ์ผ๊ฐ„ ๋ณ€์ˆ˜ ์ถฉ๋Œ ์œ„ํ—˜์„ฑ๋„ ๋ฐœ์ƒํ•œ๋‹ค.

CommonJS์™€ AMD(Asynchronous Module Definition) ์Šคํƒ€์ผ์˜ ๋ชจ๋“ˆ ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•˜๋ฉด ํŒŒ์ผ๋ณ„๋กœ ๋ชจ๋“ˆ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์ง€๋งŒ, ๋ชจ๋“ˆ๋กœ ๋งŒ๋“  ํŒŒ์ผ์€ ๋ฐ”๋กœ ์›น ํŽ˜์ด์ง€์— ๋„ฃ์–ด ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์—†๋‹ค. webpack์œผ๋กœ ์ปดํŒŒ์ผํ•˜์—ฌ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ํ˜•ํƒœ๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค.

webpack์ด๋ž€ ํ˜„๋Œ€ JavaScript Application์˜ Static Module Bundler์ด๋‹ค. Webpack์ด ์‹คํ–‰๋œ๋‹ค๋ฉด Dependencies Graph๋ฅผ ํ†ตํ•ด ํ•„์š”ํ•œ ํ˜•ํƒœ์˜ ํ•˜๋‚˜ ์ด์ƒ์˜ Bundle๋กœ ์ƒ์„ฑํ•œ๋‹ค.

๋ชจ๋“ˆ ๋ฒˆ๋“ค๋Ÿฌ๋ž€ ์—ฌ๋Ÿฌ๊ฐœ์˜ ๋‚˜๋ˆ„์–ด์ ธ ์žˆ๋Š” ํŒŒ์ผ๋“ค์„ ํ•˜๋‚˜์˜ ํŒŒ์ผ๋กœ ๋งŒ๋“ค์–ด์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋งํ•œ๋‹ค. ๋ชจ๋“ˆ ๋ฒˆ๋“ค๋Ÿฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—๋Š” webpack, Parcel ๋“ฑ์ด ์žˆ๋‹ค.

๋ชจ๋“ˆ ๋ฒˆ๋“ค๋Ÿฌ๋Š” ์—ฌ๋Ÿฌ๊ฐœ์˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์„ ํ•˜๋‚˜์˜ ํŒŒ์ผ๋กœ ๋ฌถ์–ด์„œ ํ•œ๋ฒˆ์˜ ์š”์ฒญ์„ ํ†ตํ•ด ๊ฐ€์ง€๊ณ  ์˜ฌ ์ˆ˜ ์žˆ๊ฒŒํ•˜๊ณ , ์ตœ์‹  ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฌธ๋ฒ•์„ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค. ๋˜ํ•œ ๋ชจ๋“ˆ ๋ฒˆ๋“ค๋Ÿฌ๋“ค์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋ฅผ ์••์ถ•ํ•˜๊ณ  ์ตœ์ ํ™” ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋กœ๋”ฉ ์†๋„๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.

์ˆ˜ ๋งŽ์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์ด ํ•˜๋‚˜์˜ ํŒŒ์ผ๋กœ ๋ฌถ์ธ๋‹ค๋ฉด, ์ดˆ๊ธฐ ๋กœ๋”ฉ ์†๋„๊ฐ€ ์–ด๋งˆ์–ด๋งˆํ•ด์งˆ ์ˆ˜ ์žˆ์ง€๋งŒ, ๋ชจ๋“ˆ ๋ฒˆ๋“ค๋Ÿฌ๋Š” ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์ฒญํฌ, ์บ์‹œ, ์ฝ”๋“œ ์Šคํ”Œ๋ฆฟ ๊ฐœ๋…์„ ๋„์ž…ํ–ˆ๋‹ค.

์‰ฝ๊ฒŒ ํ’€์–ด ์„ค๋ช…ํ•˜๋ฉด ํŒŒ์ผ ๊ฐ„์˜ ์—ฐ๊ด€ ๊ด€๊ณ„๋ฅผ ํŒŒ์•…ํ•ด ํ•˜๋‚˜์˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ๋กœ ๋ณ€ํ™˜ํ•ด ์ฃผ๋Š” ๋ณ€ํ™˜ ๋„๊ตฌ์ด๋‹ค.

์—”ํŠธ๋ฆฌ ํŒŒ์ผ์€ ๋‹ค์Œ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ์„œ๋กœ ์˜์กด ๊ด€๊ณ„๊ฐ€ ์žˆ๋Š” ๋‹ค์–‘ํ•œ ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜๋Š” ์‹œ์ž‘์ ์ด ๋˜๋Š” ํŒŒ์ผ์ด๋‹ค. webpack์—์„œ ์ปดํŒŒ์ผ์€ ์—”ํŠธ๋ฆฌ ํŒŒ์ผ์„ ์‹œ์ž‘์œผ๋กœ ์˜์กด ๊ด€๊ณ„์— ์žˆ๋Š” ๋ชจ๋“ˆ์„ ์—ฎ์–ด์„œ ํ•˜๋‚˜์˜ ๋ฒˆ๋“ค ํŒŒ์ผ์„ ๋งŒ๋“œ๋Š” ์ž‘์—…์ด๋‹ค. JavaScript๋ฅผ ์‚ฌ์šฉํ•˜๋Š” HTML ์ฝ”๋“œ์—์„œ๋Š” ์ปดํŒŒ์ผ ๊ฒฐ๊ณผ๋กœ ๋งŒ๋“ค์–ด์ง„ ๋ฒˆ๋“คํŒŒ์ผ๋งŒ ํฌํ•จํ•˜๋ฉด๋œ๋‹ค.

๋‹ค์Œ๊ณผ ๊ฐ™์ด ์—”ํŠธ๋ฆฌ ํŒŒ์ผ์ด ์—ฌ๋Ÿฌ๊ฐœ์ธ ๊ฒฝ์šฐ ๊ฐ๊ฐ์˜ ์—”ํŠธ๋ฆฌ ํŒŒ์ผ๋งˆ๋‹ค ๋ฒˆ๋“คํŒŒ์ผ์ด ์ƒ์„ฑ๋œ๋‹ค.

Bundle์ด๋ž€?

์†Œํ”„ํŠธ์›จ์–ด ๋ฐ ์ผ๋ถ€ ํ•˜๋“œ์›จ์–ด์™€ ํ•จ๊ป˜ ์ž‘๋™ํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ๋ชจ๋“  ๊ฒƒ์„ ํฌํ•จํ•˜๋Š” Package์ด๋‹ค. ๊ฐ๊ฐ์˜ ๋ชจ๋“ˆ๋“ค์— ๋Œ€ํ•ด ์˜์กด์„ฑ ๊ด€๊ณ„๋ฅผ ํŒŒ์•…ํ•˜์—ฌ ํ•˜๋‚˜ ๋˜๋Š” ์—ฌ๋Ÿฌ๊ฐœ์˜ ๊ทธ๋ฃน์œผ๋กœ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

์›นํŒฉ์˜ ์ฃผ์š” ์†์„ฑ

์†์„ฑ

์„ค๋ช…

entry

์›นํŒฉ์œผ๋กœ ๋นŒ๋“œ(๋ณ€ํ™˜)ํ•  ๋Œ€์ƒ ํŒŒ์ผ์„ ์ง€์ •ํ•˜๋Š” ์†์„ฑ. entry๋กœ ์ง€์ •ํ•œ ํŒŒ์ผ์˜ ๋‚ด์šฉ์—๋Š” ์ „์ฒด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋กœ์ง๊ณผ ํ•„์š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋กœ๋”ฉํ•˜๋Š” ๋กœ์ง์ด ๋“ค์–ด๊ฐ„๋‹ค.

output

์›นํŒฉ์œผ๋กœ ๋นŒ๋“œํ•œ ๊ฒฐ๊ณผ๋ฌผ์˜ ์œ„์น˜์™€ ํŒŒ์ผ ์ด๋ฆ„ ๋“ฑ ์„ธ๋ถ€ ์˜ต์…˜์„ ์„ค์ •ํ•˜๋Š” ์†์„ฑ

loader

์›นํŒฉ์œผ๋กœ ๋นŒ๋“œํ•  ๋•Œ HTML, CSS, PNG ํŒŒ์ผ ๋“ฑ์„ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ๋ณ€ํ™˜ํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ์„ค์ •์˜ ์ •์˜ํ•˜๋Š” ์†์„ฑ

plugin

์›นํŒฉ์œผ๋กœ ๋นŒ๋“œํ•˜๊ณ  ๋‚˜์˜จ ๊ฒฐ๊ณผ๋ฌผ์— ๋Œ€ํ•ด ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ์†์„ฑ ex) ๊ฒฐ๊ณผ๋ฌผ์˜ ์‚ฌ์ด์ฆˆ๋ฅผ ์ค„์ด๊ฑฐ๋‚˜, ๊ฒฐ๊ณผ๋ฌผ์„ ๊ธฐํƒ€ CSS, HTML ํŒŒ์ผ๋กœ ๋ถ„๋ฆฌํ•˜๋Š” ๊ธฐ๋Šฅ

resolve

์›นํŒฉ์œผ๋กœ ๋นŒ๋“œํ•  ๋•Œ ํ•ด๋‹น ํŒŒ์ผ์ด ์–ด๋–ป๊ฒŒ ํ•ด์„๋˜๋Š”์ง€ ์ •์˜ํ•˜๋Š” ์†์„ฑ ex) ํŠน์ • ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋กœ๋”ฉํ•  ๋•Œ ๋ฒ„์ „์€ ์–ด๋–ค๊ฑธ๋กœํ• ์ง€, ํŒŒ์ผ ๊ฒฝ๋กœ๋Š” ์–ด๋””๋กœ ํ• ์ง€ ์ •์˜

webpack vs (Browsify, Grunt, Gulp)

  • ํฌ๊ณ  ๋ณต์žกํ•˜๋ฉฐ ๋‹ค์–‘ํ•œ ๋ฆฌ์†Œ์Šค๋“ค์ด ๋“ค์–ด์žˆ๋Š” ํ”„๋กœ์ ํŠธ์—๋Š” webpack์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

  • Grunt, Gulp๋Š” ์˜ค๋กœ์ง€ ๋ฆฌ์†Œ์Šค๋“ค์— ๋Œ€ํ•œ ํˆด๋กœ ์‚ฌ์šฉ๋˜๋ฉฐ dependency graph์— ๋Œ€ํ•œ ๊ฐœ๋…์ด ์—†๋‹ค.

  • Browsify๋Š” ๋น„์Šทํ•œ ๋„๊ตฌ์ด์ง€๋งŒ ์†๋„๋ฉด์—์„œ webpack์ด ๋” ์ข‹๋‹ค.

์‹ค์Šต

๋ชจ๋“ˆ ์ •์˜

module.exports = { message: 'webpack' };

๋‹ค์Œ๊ณผ ๊ฐ™์ด module.exports ์†์„ฑ์— ์™ธ๋ถ€์— ๋ฐฐํฌํ•  ๋ชจ๋“ˆ์„ ์ „๋‹ฌํ•ด ๋ชจ๋“ˆ์„ ์ •์˜ํ•œ๋‹ค.

๋ชจ๋“ˆ ์‚ฌ์šฉ

alert(require('./testmodule').message);

testmodule.js ํŒŒ์ผ์„ require() ํ•จ์ˆ˜์— ๊ฒฝ๋กœ๋ฅผ ์ „๋‹ฌํ•จ์œผ๋กœ์จ ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

์—ฌ๋Ÿฌ ๋ชจ๋“ˆ์„ ํ•ฉ์น˜๊ฑฐ๋‚˜ ์ค‘์ฒฉํ•ด์„œ ๋ชจ๋“ˆ์„ ๋กœ๋”ฉํ•  ์ˆ˜ ์žˆ๋‹ค.

// hello.js
module.exports = 'Hello';
// world.js
module.exports = 'World';
// greeting.js
var greeting = require('./hello') + require('./world');
module.exports = greeting;

hello.js์™€ world.js๋ฅผ ํ•ฉ์นœ ๋ชจ๋“ˆ์ธ greeting.js๋ฅผ ๋กœ๋”ฉํ•ด ๋ธŒ๋ผ์šฐ์ €์—์„œ ๊ฒฝ๊ณ  ๋ฉ”์„ธ์ง€๊ฐ€ ๋‚˜ํƒ€๋‚˜๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

// app.js
alert(require('./greeting'));

๋ชจ๋“ˆ์„ ์ •์˜ํ•˜๊ณ  ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜๋„๋ก ๋กœ๋”ฉํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์–ด๋ ต์ง€ ์•Š๋‹ค. ๋‹ค๋งŒ ๋ชจ๋“ˆ๋กœ ๋งŒ๋“  ํŒŒ์ผ์€ ๋ฐ”๋กœ ์›น ํŽ˜์ด์ง€์— ๋„ฃ์–ด ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์—†๋‹ค. webpack์œผ๋กœ ์ปดํŒŒ์ผํ•ด ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ํ˜•ํƒœ๋กœ ๋ฐ”๊ฟ”์•ผํ•œ๋‹ค.

webpack ์ด์šฉํ•˜๊ธฐ

์„ค์น˜

$ npm install webpack -g

์ปดํŒŒ์ผ

$ webpack {์—”ํŠธ๋ฆฌ ํŒŒ์ผ ๊ฒฝ๋กœ} {๋ฒˆ๋“ค ํŒŒ์ผ ๊ฒฝ๋กœ}
$ webpack --watch {์—”ํŠธ๋ฆฌ ํŒŒ์ผ ๊ฒฝ๋กœ} {๋ฒˆ๋“ค ํŒŒ์ผ ๊ฒฝ๋กœ}

--watch ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ชจ๋“ˆ ํŒŒ์ผ์ด ๋ณ€๊ฒฝ๋  ๋•Œ๋งˆ๋‹ค ๋ณ€๊ฒฝ๋œ ๋ชจ๋“ˆ์„ ์ž๋™์œผ๋กœ ๋‹ค์‹œ ์ปดํŒŒ์ผํ•œ๋‹ค.

๋ชจ๋“ˆ์˜ ์Šค์ฝ”ํ”„

์ปดํŒŒ์ผ ๊ณผ์ •์—์„œ ๊ฐ ๋ชจ๋“ˆ์€ ํ•จ์ˆ˜๋กœ ๊ฐ์‹ธ์ง„๋‹ค.

// greeting.js
var greeting = require('./hello.js') + require('./world.js');
module.exports = greeting;

์—ฌ๊ธฐ์„œ greeting์€ ์ „์—ญ ๋ณ€์ˆ˜์ด์ง€๋งŒ webpack์œผ๋กœ ๋ชจ๋“ˆ์ด ์ปดํŒŒ์ผ ๋œ ํ›„์—๋Š” ์ง€์—ญ ๋ณ€์ˆ˜๊ฐ€ ๋œ๋‹ค.

์„ค์ • ํŒŒ์ผ ์‚ฌ์šฉ

CLI(Command Line Interface)๋กœ webpack์„ ์‹คํ–‰ํ•ด ์ปดํŒŒ์ผํ•  ๋•Œ ์—”ํŠธ๋ฆฌ ํŒŒ์ผ์ด ๋งŽ๊ฑฐ๋‚˜ ์˜ต์…˜์ด ๋งŽ์œผ๋ฉด ์ž…๋ ฅํ•˜๊ธฐ๊ฐ€ ๋ถˆํŽธํ•˜๋‹ค. ์„ค์ • ํŒŒ์ผ์„ ๋งŒ๋“ค์–ด ์ปดํŒŒ์ผํ•˜๋ฉด ์ด๋Ÿฌํ•œ ๋ถˆํŽธํ•จ์„ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.

// webpack.config.js
module.exports = {  
    context: __dirname + '/app', // ๋ชจ๋“ˆ ํŒŒ์ผ ํด๋”
    entry: { // ์—”ํŠธ๋ฆฌ ํŒŒ์ผ ๋ชฉ๋ก
        app: './app.js' 
    },
    output: {
        path: __dirname + '/dist', // ๋ฒˆ๋“ค ํŒŒ์ผ ํด๋”
        filename: '[name].bundle.js' // ๋ฒˆ๋“ค ํŒŒ์ผ ์ด๋ฆ„ ๊ทœ์น™
    }
}

๋‹ค์Œ๊ณผ ๊ฐ™์ด webpack.config.js ํŒŒ์ผ์„ ์ž‘์„ฑํ•ด ์ €์žฅํ•œ๋‹ค.

$ webpack

๊ฐ„๋‹จํ•˜๊ฒŒ ์œ„์™€ ๊ฐ™์ด ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ์ปดํŒŒ์ผ์ด ์‹คํ–‰๋˜๋ฉฐ, --watch ์˜ต์…˜์œผ๋กœ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ž๋™์œผ๋กœ ๋ฐ˜์˜ํ•˜๋ ค ํ•  ๋•Œ๋„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜๋ฉด๋œ๋‹ค.

$ webpack --watch

loader

webpack์˜ loader๋Š” ๋‹ค์–‘ํ•œ ๋ฆฌ์†Œ์Šค๋ฅผ JavaScript์—์„œ ๋ฐ”๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํ˜•ํƒœ๋กœ ๋กœ๋”ฉํ•˜๋Š” ๊ธฐ๋Šฅ์ด๋‹ค. loader๋Š” webpack์˜ ํŠน์ง•์ ์ธ ๊ธฐ๋Šฅ์ด๋ฉด์„œ ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ๋กœ ๋งŒ๋“œ๋Š” ๊ธฐ๋Šฅ์ด๋‹ค.

image-20191014212216361

๋‹ค์Œ๊ณผ ๊ฐ™์ด loader์˜ ์ข…๋ฅ˜์— ๋”ฐ๋ผ ๋‹ค์–‘ํ•œ ํ˜•ํƒœ์˜ ๊ฒฐ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, template ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ธ handlebars loader์ธ handlebars-loader ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณผ ๊ฒƒ์ด๋‹ค.

  • handlebars ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์„ค์น˜๋œ ํ™˜๊ฒฝ์—์„œ ์ง„ํ–‰ํ•ด์•ผํ•œ๋‹ค.

$ npm install handlebars-loader

handlebars-loader ์„ค์น˜๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด webpack.config.js ํŒŒ์ผ์— ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋กœ๋” ๊ด€๋ จ ์„ค์ •์„ ์ถ”๊ฐ€ํ•œ๋‹ค.

// webpack.config.js
module.exports = {  
    ...
    output: {
       ...
    },
    module: {
      loaders: [
        // ์ ์šฉํ•  ํŒŒ์ผ์˜ ํŒจํ„ด๊ณผ ์ ์šฉํ•  ๋กœ๋” ์„ค์ •
        {
          test: /\-tmpl.html$/
          loader: 'handlebars'
        }
      ]
    }
}

test-tmpl.html ํŒŒ์ผ์„ ์ƒ์„ฑํ•ด์ค€๋‹ค.

<div>{{greeting}}</div>

require() ํ•จ์ˆ˜๋กœ ํ…œํ”Œ๋ฆฟ ํŒŒ์ผ์„ ๋กœ๋”ฉํ•œ ๊ฒฐ๊ณผ๋Š” handlebars.compile() ํ•จ์ˆ˜๋ฅผ ๊ฑฐ์ณ ๋ฐ˜ํ™˜๋œ ๊ฒฐ๊ณผ๋กœ, ๋ฐ”๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ์ž…ํ•ด ๋ฐ์ดํ„ฐ์™€ ๊ฒฐํ•ฉ๋œ html ์ฝ”๋“œ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.

var testTmpl = require('./test-tmpl.html');
testTmpl({ greeting: 'Hello World'});

๊ฐœ๋ฐœ์ž ๋„๊ตฌ ์—ฐ๋™

// webpack.config.js
module.exports = {
  ...
  devtool: '#inline-source-map'
}

webpack์„ ์‚ฌ์šฉํ•  ๋•Œ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‹คํ–‰๋˜๋Š” ์ฝ”๋“œ๋Š” webpack์œผ๋กœ ์ปดํŒŒ์ผ๋œ ์ฝ”๋“œ์ด๋‹ค. webpack์˜ ์†Œ์Šค ๋งต ์„ค์ •์„ ์‚ฌ์š”ํ•˜๋ฉด ์ปดํŒŒ์ผ๋œ ํŒŒ์ผ์—์„œ๋„ ์›๋ž˜ ํŒŒ์ผ ๊ตฌ์กฐ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ธŒ๋ผ์šฐ์ €์—์„œ ์›น ํŽ˜์ด์ง€๋ฅผ ์—ด๊ณ  ๊ฐœ๋ฐœ์ž ๋„๊ตฌ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ๋Œ€ ํŒŒ์ผ๊ตฌ์กฐ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๊ณ , ์‹ค์ œ ์ž‘์„ฑํ•œ ์ฝ”๋“œ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค. (webpack://) ๋„๋ฉ”์ธ ์•„๋ž˜์— ๋ชจ๋“ˆ์„ ๊ตฌ์„ฑํ•˜๋Š” ํŒŒ์ผ ๊ตฌ์กฐ๊ฐ€ ๋‚˜ํƒ€๋‚œ๋‹ค.

์ฐธ์กฐ ํŽ˜์ด์ง€

Last updated

Was this helpful?