npm init -y
-> src ํด๋ ์์ฑ ํ, index.jsํ์ผ๊ณผ underbar.js ํ์ผ์ ๊ฐ๊ฐ ์์ฑ
// src/index.js
const _ = require('./underbar.js')
const shout = (...sentences) => console.log(...sentences);
const loremIpsum = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis egestas feugiat elit, ac tincidunt neque vestibulum at. Mauris a eros sit amet urna efficitur tempus."
const shoutOnce = _.once(shout);
shoutOnce(loremIpsum);
shoutOnce(loremIpsum);
shoutOnce(loremIpsum);
shoutOnce(loremIpsum);
// src/underbar.js
const _ = {
once(func) {
// ์๋ ๋ณ์๋ค์ ์๋ ์ ์ธ/๋ฆฌํด๋๋ ํจ์ ์์์ ์ฐธ์กฐ๋ฉ๋๋ค.
// ๋ฆฌํด๋๋ ํจ์์ scope ๋ด์ ์กด์ฌํ๋ฏ๋ก, ๋ฆฌํด๋๋ ํจ์๋ฅผ ์ธ์ ์คํํด๋ ์ด ๋ณ์๋ค์ ์ ๊ทผํ ์ ์์ต๋๋ค.
let result;
let alreadyCalled = false;
return function (...args) {
// TIP: arguments ํค์๋ ํน์, spread operator๋ฅผ ์ฌ์ฉํ์ธ์.
if (!alreadyCalled) {
alreadyCalled = true;
result = func(...args);
}
return result;
};
},
};
module.exports = _; // ๋ค๋ฅธ ํ์ผ์์ ์ฌ์ฉํ ์ ์๊ฒ export
์นํฉ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์ ์นํฉ์ ์ค์นํ๋ค.
cf. -D : devDependency์ต์ ์ ์ค์
dependencies
์ ์ค์น๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋ฐฐํฌํ ๋ ํฌํจ๋์ง๋ง
devDependencies
์ ์ค์น๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๊ฐ๋ฐํ ๋ ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ธฐ ๋๋ฌธ์ ๋ฐฐํฌํ ๋ ํฌํจ๋์ง๋ ์๋๋ค.
npm install -D webpack webpack-cli
ํ์ผ์ ๋ฃจํธ ๊ฒฝ๋ก์ ์์ฑํ๋ค.
// webpack.config.js
const path = require('path');
module.exports = {
entry: './src/index.js',
output: {
path: path.resolve(__dirname, 'dist'), // './dist'์ ์ ๋ ๊ฒฝ๋ก๋ฅผ ๋ฆฌํดํฉ๋๋ค.
filename: 'app.bundle.js',
},
};
๋ฒ๋ค๋ง์ ํ๊ธฐ ์ํด์๋ ๋ค์๊ณผ ๊ฐ์ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ๋ค.
npx webpack
๋ฒ๋ค๋ง ์ฑ๊ณต์ ๋ค์๊ณผ ๊ฐ์ ๋ฌธ๊ตฌ๋ค์ด ๋์จ๋ค.
๋ฒ๋ค๋ง์ ์์ฑ๋ ํ์ผ์ ๋น ๋ฅด๊ฒ ํ์ผ์ ์ ๋ฌํ๊ธฐ ์ํด์ ์ต์ํ๋ ์ฝ๋๋ก,
์์๋ณด๊ธฐ ํ๋ค๊ฒ ์์ฑ๋์ด ์๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
node๋ก ๋ฒ๋ค๋งํ app.bundle.js
ํ์ผ์ ๊ฒฐ๊ณผ์
์ํธ๋ฆฌ ํฌ์ธํธ๋ก ์ง์ ํ src/index.js
ํ์ผ ์คํ๊ฒฐ๊ณผ์ ๋์ผํ๋ฉด ์ฑ๊ณต์ด๋ค.
node dist/app.bundle.js
package.json
ํ์ผ์ script์ ์๋์ ๊ฐ์ด ์์ฑํด๋๋ฉด
npm run build
๋ช
๋ น์ ์ฝ๊ฒ ๋ฒ๋ค๋ง์ ํ ์ ์๋ค.