Rollup

Rollup

  • ํ‘œ์ค€ ๋ชจ๋“ˆ ์‹œ์Šคํ…œ ๋ฌธ๋ฒ•(esm)์œผ๋กœ ์ž‘์„ฑ๋œ ์—ฌ๋Ÿฌ ํŒŒ์ผ๋กœ ์ด๋ฃจ์–ด์ง„ ์ฝ”๋“œ๋ฅผ ํ•œ๊ฐœ ํ˜น์€ ๋ช‡๊ฐœ๋กœ ๋ฌถ์–ด์ฃผ๋Š” ์—ญํ• 

  • ๋ฌถ์–ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ๋ฒˆ๋“ค๋Ÿฌ๋ผ ํ•จ

  • ๋ฌถ์–ด์ฃผ๋Š” ๋™์ž‘์„ ํ•˜๋ฉด์„œ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์ผ๋“ค(Compile, Minify ๋“ฑ)์„ ํ•จ๊ป˜ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ์—ฌ๋Ÿฌ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ํ™œ์šฉ

  • ๋ณดํ†ต ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ œ์ž‘์„ ์œ„ํ•œ ๋ฒˆ๋“ค๋Ÿฌ๋กœ ๋งŽ์ด ์‚ฌ์šฉ๋จ

    • ์˜คํ”ˆ ์†Œ์Šค์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ๋ฒˆ๋“ค๋Ÿฌ

  • ๋กค์—…์„ ์ง์ ‘ ์‚ฌ์šฉํ• ์ˆ˜๋„ ์žˆ์ง€๋งŒ, ๋กค์—…์„ ์‚ฌ์šฉํ•˜๋Š” ๋‹ค๋ฅธ ๋„๊ตฌ์—์„œ ๋กค์—…์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ์–ด ์‚ฌ์šฉ๋ฐฉ์‹์ด๋‚˜ ์„ค์ •์— ๋Œ€ํ•œ ํ•™์Šต์ด ์ค‘์š”

  • Terser๋Š” ๋ณ€์ˆ˜ ์ด๋ฆ„์„ ์ž‘๊ฒŒ ๋งŒ๋“ค๊ณ , ๊ณต๋ฐฑ๊ณผ ์ฃผ์„ ์ œ๊ฑฐ, ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ฝ”๋“œ์ œ๊ฑฐ

    • ์šฐ๋ฆฌ๊ฐ€ ์ง์ ‘ Terser๋ฅผ ์‚ฌ์šฉํ•  ์ผ์€ ์ ๋‹ค. ์–ด๋–ค ์—ญํ• ์„ ํ•˜๋Š”์ง€ ๋ช…ํ™•ํ•˜๊ฒŒ ์ธ์ง€

cjs - commonjs (Node.js)

  • Node.js๊ฐ€ ์ฑ„ํƒํ•œ ๋ชจ๋“ˆ๊ด€๋ฆฌ ๋ฐฉ์‹

  • module.exports = ~~~

  • const plusONe = require("๊ฒฝ๋กœ")

esm - es module (ํ‘œ์ค€ ์ŠคํŽ™)

  • ์ตœ์‹  ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฒ„์ „์—์„œ ์ง€์›

  • Node.js์—์„œ๋„ .mjs ํ™•์žฅ์ž๋ฅผ ํ†ตํ•ด ์ง€์›

rollup.config.js

  • ๋ฒˆ๋“ค๋ง์€ ์–ด๋–ค ํŒŒ์ผ์„ ๊ฐ€์ง€๊ณ  ์–ด๋””์—๋‹ค ์ถœ๋ ฅํ• ๊ฒƒ์ธ์ง€ ์ง€์ •ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.

  • ๋กค์—…์€ ๊ธฐ๋ณธ์ ์œผ๋กœ node ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰๋ ๊ฑฐ๊ธฐ ๋•Œ๋ฌธ์— cjs๋ฃฐ์„ ๋”ฐ๋ฆ„

module.exports = {
  input: 'src/main.js'
  output: [{
    file: 'dist/bundle.js',
    format: 'cjs'
  },{
    file: 'dist/bundle.mjs",
    format: "es", //esm
  },
  ],
  plugins: [commonjs(), babel({ babelHelpers: "bundled" })]
}
"scripts": {
  "build": "rollup -c"
}

Terser

Javascript mangler and compressor toolkit "์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ mangler ๋ฐ ์••์ถ•๊ธฐ ๋„๊ตฌ"

  • mangler: ๋ง๊ฐ€๋œจ๋ฆฌ๋Š” ์‚ฌ๋žŒ, ๊ณ ๊ธฐ๋ฅผ ์จ๋Š” ๊ธฐ๊ณ„

    • ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์ˆ˜์ค€์œผ๋กœ ๋ง๊ฐ€๋œจ๋ฆฌ๋‹ค.

    • ์‚ฌ๋žŒ์ด ์ดํ•ดํ•˜๊ธฐ ์–ด๋ ต์ง€๋งŒ ์ปดํ“จํ„ฐ๊ฐ€ ์‹คํ–‰ํ•˜๊ธฐ์— ๊ฐ€๋Šฅํ•œ ์ˆ˜์ค€์œผ๋กœ

  • Terser๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋ฅผ ์œ„ํ•œ ์—…๊ณ„ ํ‘œ์ค€ minifier

  • ๋ณ€์ˆ˜ ์ด๋ฆ„์„ ์ž‘๊ฒŒ, ๊ณต๋ฐฑ๊ณผ ์ฃผ์„ ์ œ๊ฑฐ, ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ฝ”๋“œ ์ œ๊ฑฐ ๋“ฑ

  • ์ปค๋งจ๋“œ๋ผ์ธ ๋ช…๋ น์–ด ํ˜น์€ Node.js API๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

  • ๋ณดํ†ต ์ง์ ‘ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ , ๋งŽ์€ ๋‹ค๋ฅธ ๋„๊ตฌ๋“ค์—์„œ ์‚ฌ์šฉ๋จ

    • Webpack, Parcel, angular

์ปค๋งจ๋“œ๋ผ์ธ

  • terser [input files] [options]

  • pnpm exec terser input.js --compress --mangle --output dist/output

Rollup์œผ๋กœ ๋ฒˆ๋“ค๋ง ํ•  ๋•Œ terser ์ถ”๊ฐ€

pnpm add @rollup/plugin-terser -D
const terser = require("@rollup/plugin-terser");

module.exports = {
  input: 'src/main.js'
  output: [{
    file: 'dist/bundle.js',
    format: 'cjs'
  },{
    file: 'dist/bundle.mjs",
    format: "es", //esm
  },
  ],
  plugins: [commonjs(), babel({ babelHelpers: "bundled" }, terser())]
}

Last updated