Rollup: ๋ชจ๋ ๋ฒ๋ค๋ฌ์ ํ์
1. Rollup ์๊ฐ
1.1 ๊ฐ๋
Rollup์ JavaScript ๋ชจ๋ ๋ฒ๋ค๋ฌ๋ก, ํ๋ก์ ํธ์ ๋ชจ๋ ์ฝ๋๋ฅผ ํ๋๋ก ๊ฒฐํฉํ์ฌ ์ต์ ํ๋ ๋ฒ๋ค์ ์์ฑํ๋ ๋๊ตฌ์ ๋๋ค. ํนํ ES6 ๋ชจ๋์ ํ์ค์ ์ ๋ฐ๋ฅด๊ณ Tree-shaking๊ณผ ๊ฐ์ ์ฑ๋ฅ ์ต์ ํ๋ฅผ ๊ฐ์กฐํ๋ฉฐ ๋ง์ ๊ฐ๋ฐ์๋ค์๊ฒ ์ธ๊ธฐ๋ฅผ ์ป๊ณ ์์ต๋๋ค.
1.2 ์ ๋
Rollup์ 2015๋ Rich Harris์ ์ํด ๋ง๋ค์ด์ก์ผ๋ฉฐ, ES6 ๋ชจ๋์ ํ์ค์ ๋ฐ๋ฅด๋ ์ฒซ ๋ฒ์งธ ๋ฒ๋ค๋ฌ๋ก ์ฃผ๋ชฉ๋ฐ์์ต๋๋ค. ๊ทธ ๋ค๋ก๋ ๊พธ์คํ ์ ๋ฐ์ดํธ์ ๊ธฐ๋ฅ ์ถ๊ฐ๋ก ๋ง์ ์ฌ์ฉ์๋ค์๊ฒ ์ ํธ๋๋ ๋๊ตฌ๋ก ์๋ฆฌ๋งค๊นํ์ต๋๋ค.
2. Rollup์ ์ฐ๊ด ๊ธฐ์
2.1 Babel
Babel์ Rollup๊ณผ ํจ๊ป ์ฌ์ฉ๋์ด ์ต์ JavaScript ๋ฌธ๋ฒ์ ํ์ ๋ธ๋ผ์ฐ์ ์์๋ ๋์ ๊ฐ๋ฅํ ์ฝ๋๋ก ๋ณํํด์ค๋๋ค.
2.2 NPM (Node Package Manager)
NPM์ Rollup์์ ํ์๋ก ํ๋ ํ๋ฌ๊ทธ์ธ ๋ฐ ๋ชจ๋์ ์ฝ๊ฒ ์ค์นํ๊ณ ๊ด๋ฆฌํ ์ ์๊ฒ ๋์์ค๋๋ค.
3. Rollup ํ๋ฌ๊ทธ์ธ ์๊ฐ
Rollup์ ํ๋ฌ๊ทธ์ธ ์์คํ ์ ํตํด ๋ค์ํ ์์ ์ ์ํํ ์ ์์ต๋๋ค. ๋ช ๊ฐ์ง ์ ์ฉํ ํ๋ฌ๊ทธ์ธ๋ค์ ์ดํด๋ด ์๋ค.
3.1 rollup-plugin-node-resolve
์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ชจ๋๋ก ๊ฐ์ ธ์ค๊ธฐ ์ํด ํ์ํ ํ๋ฌ๊ทธ์ธ์ผ๋ก, NPM์ ๋ฑ๋ก๋ ํจํค์ง๋ฅผ ์ฝ๊ฒ ๊ฐ์ ธ์ ๋ฒ๋ค์ ํฌํจ์ํฌ ์ ์์ต๋๋ค.
3.2 rollup-plugin-commonjs
CommonJS ๋ชจ๋ ํ์์ผ๋ก ์์ฑ๋ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ES6 ๋ชจ๋ ํ์์ผ๋ก ๋ณํํ์ฌ ์ฌ์ฉํ ์ ์๊ฒ ๋์์ค๋๋ค.
3.3 rollup-plugin-babel
Babel๊ณผ ํตํฉํ์ฌ Rollup์์ ES6+ ์ฝ๋๋ฅผ ํ์ ๋ธ๋ผ์ฐ์ ์์ ํธํ ๊ฐ๋ฅํ ์ฝ๋๋ก ๋ณํํฉ๋๋ค.
3.4 rollup-plugin-terser
Rollup์ด ์์ฑํ ๋ฒ๋ค์ ์์ถํ์ฌ ํ์ผ ํฌ๊ธฐ๋ฅผ ์ต์ํํฉ๋๋ค.
4. Rollup์ ์ฅ๋จ์
4.1 ์ฅ์
- Tree-shaking: ์ฌ์ฉ๋์ง ์๋ ์ฝ๋๋ฅผ ์๋์ผ๋ก ์ ๊ฑฐํ์ฌ ์ต์ ํ๋ ๋ฒ๋ค์ ์์ฑํฉ๋๋ค.
- ES6 ๋ชจ๋ ์ง์: ํ์ค์ ์ค์ํ์ฌ ES6 ๋ชจ๋์ ์ง์ํ๋ฉฐ, ์ด๋ ๋ธ๋ผ์ฐ์ ์์์ ์ฑ๋ฅ ํฅ์์ ๊ธฐ์ฌํฉ๋๋ค.
- ํ๋ฌ๊ทธ์ธ ์ํ๊ณ: ๋ค์ํ ํ๋ฌ๊ทธ์ธ์ ํ์ฉํ์ฌ ํ๋ก์ ํธ์ ๋ง๋ ์ค์ ์ ์ ์ฐํ๊ฒ ๊ตฌ์ฑํ ์ ์์ต๋๋ค.
4.2 ๋จ์
- ์ค์ ๋ณต์ก์ฑ: ์ด๊ธฐ ์ค์ ์ด ๋ค์ ๋ณต์กํ ์ ์๊ณ , ๋ค๋ฅธ ๋ฒ๋ค๋ฌ์ ๋นํด ํ์ต ๊ณก์ ์ด ๋์ ์ ์์ต๋๋ค.
- ๋๊ท๋ชจ ํ๋ก์ ํธ์ ๋ถ์ ํฉ: ๋๊ท๋ชจ ํ๋ก์ ํธ์์๋ Webpack๊ณผ ๊ฐ์ ๋ค๋ฅธ ๋ฒ๋ค๋ฌ๊ฐ ๋ ์ ํฉํ ์ ์์ต๋๋ค.
5. Rollup ์ค์ ์์
์๋๋ Rollup ์ค์ ์ ๊ฐ๋จํ ์์ ์ฝ๋์ ๋๋ค.
// rollup.config.js
import resolve from 'rollup-plugin-node-resolve';
import commonjs from 'rollup-plugin-commonjs';
import babel from 'rollup-plugin-babel';
export default {
input: 'src/main.js',
output: {
file: 'dist/bundle.js',
format: 'iife'
},
plugins: [
resolve(),
commonjs(),
babel({
exclude: 'node_modules/**'
})
]
};
์ด ์ค์ ์ ๊ธฐ๋ณธ์ ์ผ๋ก ES6 ๋ชจ๋์ ์ฌ์ฉํ๊ณ , ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ฐ์ ธ์ค๊ธฐ ์ํ ํ๋ฌ๊ทธ์ธ๋ค์ ํฌํจํ๊ณ ์์ต๋๋ค.
Rollup์ ์ฌ๋ฌ ํ๋ฌ๊ทธ์ธ๊ณผ ํจ๊ป ์ฌ์ฉ๋์ด ๊ฐ๋ ฅํ ๊ธฐ๋ฅ์ ๋ฐํํฉ๋๋ค. ๋ ๋ง์ ์ค์ ๋ฐ ํ๋ฌ๊ทธ์ธ์ Rollup ๊ณต์ ๋ฌธ์์์ ํ์ธํ ์ ์์ต๋๋ค.
Rollup์ ํ๋์ ์ธ ํ๋ก ํธ์๋ ๊ฐ๋ฐ์์ ํจ์จ์ ์ผ๋ก ์ฌ์ฉ๋๊ณ ์์ผ๋ฉฐ, ๋น์ ์ ํ๋ก์ ํธ์๋ ๋์ ์์ฐ์ฑ๊ณผ ์ฑ๋ฅ์ ์ ๊ณตํ ๊ฒ์ ๋๋ค.
'IT' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Babel: ์๋ฐ์คํฌ๋ฆฝํธ ํธ๋์คํ์ผ๋ฌ์ ์ธ๊ณ (0) | 2024.02.21 |
---|---|
Rollup vs. Webpack: ๋ชจ๋ ๋ฒ๋ค๋ฌ ๋น๊ต (0) | 2024.02.21 |
Server-Side Rendering (SSR): ๋์ ์น ํ์ด์ง ๋ ๋๋ง์ ํต์ฌ (0) | 2024.02.20 |
Business Intelligence (BI): ๋น์ฆ๋์ค์ ์งํ๋ฅผ ๋์ด๋ด๋ ํ (0) | 2024.02.20 |
์นํฉ(Webpack): ํ๋ ์น ๊ฐ๋ฐ์ ์ํ ํต์ฌ ๋๊ตฌ (0) | 2024.02.20 |
๋๊ธ