ts-loader vs babel-loader vs esbuild-loader

10/15/2022FE

์šฐ์•„ํ•œํ…Œํฌ์ฝ”์Šค์—์„œ ๋ชจ๋‘๋ชจ์—ฌ๋ผ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉฐ ์›นํŒฉ์— ์ ์šฉํ•  ๋กœ๋”์— ๋Œ€ํ•ด ๋งŽ์€ ๊ณ ๋ฏผ์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

๋Œ€ํ‘œ์ ์œผ๋กœ๋Š” ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ts-loader์™€ babel-loader๊ฐ€ ์žˆ๊ณ , ์ตœ๊ทผ์—๋Š” esbuild-loader๋ผ๋Š” ์ข€ ๋” ๋น ๋ฅธ ๋กœ๋”๊ฐ€ ๋“ฑ์žฅํ–ˆ์Šต๋‹ˆ๋‹ค. (esbuild-loader๋Š” vite์—์„œ ์‚ฌ์šฉํ•  ์ •๋„๋กœ ํ•ซํ•œ ๋กœ๋”๋ผ๊ณ  ํ•˜๋”๋ผ๊ณ ์š”!)

์ €๋Š” ํƒ€์ž… ์ฒดํ‚น๋„ ํ•˜๋ฉด์„œ ๋น ๋ฅธ ๋นŒ๋“œ ์†๋„๊นŒ์ง€ ์ฑ™๊ธฐ๊ณ  ์‹ถ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด ์„ธ ๋กœ๋”์— ๋Œ€ํ•ด ์ข€ ๋” ์•Œ์•„๋ณธ ๋’ค ์„ ํƒํ•˜์—ฌ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

๐Ÿš€ ts-loader

ts-loader๋Š” ํƒ€์ž… ์ฒด์ปค๊ฐ€ ๋‚ด์žฅ๋œ ๋กœ๋”์ž…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ํ•ด๋‹น ํ”„๋กœ์ ํŠธ์˜ tsconfig.json ํŒŒ์ผ์„ ๋ณด๊ณ  ํ•ด๋‹น ์˜ต์…˜์— ๋”ฐ๋ผ ํƒ€์ž… ์ฒดํ‚น์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

ts-loader์˜ ์‹คํ–‰ ์ˆœ์„œ๋Š” ํƒ€์ž… ์ฒดํ‚น โ†’ (ํƒ€์ž… ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์•˜์„ ๊ฒฝ์šฐ) ๋นŒ๋“œ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋นŒ๋“œ ์„ฑ๊ณต๊นŒ์ง„ ๋น„๊ต์  ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ฐ•๋ ฅํ•œ ํƒ€์ž… ์ฒดํฌ๋กœ ์ธํ•ด ์•ˆ์ „ํ•œ ํƒ€์ดํ•‘์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

๋งŒ์•ฝ ts-loader์˜ ๋นŒ๋“œ ์†๋„๋ฅผ ํ–ฅ์ƒ์‹œํ‚ค๊ณ  ์‹ถ๋‹ค๋ฉด ์ปดํŒŒ์ผ๋Ÿฌ ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

module.exports = {
  ...
  module: {
    rules: [
      {
        test: /\.tsx?$/,
        use: [
          {
            loader: 'ts-loader',
            options: {
              transpileOnly: true
            },
          },
        ],
      },
    ],
  },
};

์œ„์™€ ๊ฐ™์ด transpileOnly ์˜ต์…˜์„ true๋กœ ํ•œ๋‹ค๋ฉด ๋นŒ๋“œ ์‹œ ํƒ€์ž… ์ฒดํ‚น์„ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ถœ์ฒ˜

๊ทผ๋ฐ ํƒ€์ž… ์ฒดํ‚น์„ ํ•˜์ง€ ์•Š์œผ๋ฉด ts-loader๋ฅผ ์‚ฌ์šฉํ•œ ์˜๋ฏธ๊ฐ€ ์—†์ง€ ์•Š๋‚˜? ์ „ ๊ทธ๋ ‡๊ฒŒ ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ํƒ€์ž… ์ฒดํ‚น์„ ํ•˜๋ฉด์„œ ๋นŒ๋“œ ์†๋„๋ฅผ ๋†’์ผ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์—†์„๊นŒ ๊ณ ๋ฏผํ–ˆ์Šต๋‹ˆ๋‹ค.

๐Ÿš€ fork-ts-checker-webpack-plugin

ts-loader๋ฅผ ๋งŒ๋“  TypeStrong์—์„œ ํƒ€์ž… ์ฒดํ‚น ๊ธฐ๋Šฅ๋งŒ ๊ฐ€์ ธ์™€ ๋งŒ๋“  fork-ts-checker-webpack-plugin๋ผ๋Š” ์›นํŒฉ ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

const ForkTsCheckerWebpackPlugin = require('fork-ts-checker-webpack-plugin');

module.exports = {
  ...,
  plugins: [new ForkTsCheckerWebpackPlugin()],
};

์ด ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์‚ฌ์šฉํ•˜๋ฉด ์ž๋™์œผ๋กœ ts-loader์˜ transpileOnly ์˜ต์…˜์€ true๋กœ ์„ค์ •๋˜์–ด ๋กœ๋”์—์„œ๋Š” ํƒ€์ž… ์ฒดํ‚น์ด ๋˜์ง€ ์•Š๊ณ , ๋ณ„๋„์˜ ํ”„๋กœ์„ธ์Šค์—์„œ ์ด ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ํ†ตํ•ด ํƒ€์ž… ์ฒดํ‚น ๊ณผ์ •์ด ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค.
ํƒ€์ž… ์ฒดํ‚น์ด ์ด๋ฃจ์–ด์ง€๋Š” ์‹œ์ ์€ ๋ช…ํ™•ํ•˜๊ฒŒ ๋ฐํžŒ ๋ฐ”๊ฐ€ ์—†์–ด ํ™•์‹คํžˆ๋Š” ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ, ํ„ฐ๋ฏธ๋„์—์„œ ์›นํŒฉ์ด ์„ฑ๊ณต์ ์œผ๋กœ ์ปดํŒŒ์ผ๋˜์—ˆ๋‹ค๋Š” ๋ฉ”์‹œ์ง€ ์ดํ›„๋กœ ํƒ€์ž… ์ฒดํ‚น์ด ์‹คํ–‰๋œ๋‹ค๋Š” ๋ฌธ๊ตฌ๊ฐ€ ๋‚˜์˜จ ๊ฒƒ์„ ๋ณด์•„ ์ €๋Š” ์ปดํŒŒ์ผ ํ›„ ํƒ€์ž… ์ฒดํ‚น ๊ณผ์ •์ด ์‹คํ–‰๋œ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.

๋”์šฑ ์ข‹์€ ๊ฒƒ์€ fork-ts-checker-webpack-plugin์€ ts-loader๊ฐ€ ์•„๋‹Œ ๋‹ค๋ฅธ ๋กœ๋” ์กฐํ•ฉ์—๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ €๋Š” ts-loader๋ณด๋‹ค๋Š” ๋‹ค๋ฅธ ๋กœ๋” + fork-ts-checker-webpack-plugin์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๊ฒ ๋‹ค๊ณ  ํŒ๋‹จํ–ˆ์Šต๋‹ˆ๋‹ค.


๊ทผ๋ฐ ์ด fork-ts-checker-webpack-plugin์€ ์ผ๋ฐ˜์ ์ธ tsc์™€ ํƒ€์ž… ์ฒดํฌ๋ฅผ ํ•˜๋Š” ๊ณผ์ •์—์„œ ์ฐจ์ด๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

fork-ts-checker-webpack-plugin

๋จผ์ € fork-ts-checker-webpack-plugin์˜ ๊ฒฝ์šฐ ๋นŒ๋“œํ•  ๋•Œ๋งˆ๋‹ค ์ƒˆ๋กœ ๋ณ€๊ฒฝ๋œ ํŒŒ์ผ์ด ์–ด๋–ค ํŒŒ์ผ๊ณผ ์ข…์†์„ฑ์ด ์žˆ๋Š”์ง€๋ฅผ ์ฐพ์•„๋ƒ…๋‹ˆ๋‹ค. ์ด๋•Œ *.d.ts ํŒŒ์ผ์˜ ํƒ€์ž… ์ฒดํ‚น๋„ ์ง„ํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด ๊ณผ์ •์€ ํ”„๋กœ์ ํŠธ์˜ ๊ทœ๋ชจ๊ฐ€ ์ปค์งˆ์ˆ˜๋ก ์†Œ์š”์‹œ๊ฐ„๋„ ๋Š˜์–ด๋‚œ๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

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

tsc

tsc์˜ ๊ฒฝ์šฐ ๋นŒ๋“œ ์‹œ .tsbuildinfo ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜์—ฌ ๋‹ค์Œ ๋นŒ๋“œ๋ถ€ํ„ฐ ํ•ด๋‹น ํŒŒ์ผ์„ ์ฐธ์กฐํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฐฉ์‹ ๋•๋ถ„์— ๋‘ ๋ฒˆ์งธ ๋นŒ๋“œ๋ถ€ํ„ฐ๋Š” fork-ts-checker-webpack-plugin๋ณด๋‹ค ๋” ์ ์€ ์‹œ๊ฐ„์ด ์†Œ์š”๋œ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค๋งŒ ํƒ€์ž… ์—๋Ÿฌ๊ฐ€ ๋‚˜๋ฉด ์ปดํŒŒ์ผ์„ ํ•˜์ง€ ์•Š๊ณ  ์ข…๋ฃŒ์‹œ์ผœ๋ฒ„๋ฆฐ๋‹ค๋Š” ์ , ํŒŒ์ผ์˜ ๋ณ€๊ฒฝ์ด ์žˆ์–ด๋„ ํƒ€์ž… ์ฒดํ‚น ๊ณผ์ •์„ ์ž๋™์œผ๋กœ ์ˆ˜ํ–‰ํ•ด์ฃผ์ง€๋Š” ์•Š๋Š”๋‹ค๋Š” ์ ์œผ๋กœ ๋ณด์•„ ๋ฐฐํฌ ๋ชจ๋“œ์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ ์ ์ ˆํ•ด๋ณด์˜€์Šต๋‹ˆ๋‹ค.


๊ทธ ์™ธ์— fork-ts-checker-webpack-plugin๊ณผ tsc๋Š” ์ผ๋ถ€ ํƒ€์ž… ์ฒดํฌ์— ๋Œ€ํ•ด์„œ๋„ ์ฐจ์ด๊ฐ€ ์žˆ๋Š” ๊ฒƒ ๊ฐ™๊ธฐ๋„ ํ–ˆ๋Š”๋ฐ, ์‚ฌ์šฉํ•˜๋ฉด์„œ ๊ฐ๊ฐ์˜ ํƒ€์ž… ์ฒดํ‚น์— ๋Œ€ํ•ด ํฌ๊ฒŒ ์ฐจ์ด๋ฅผ ๋Š๋ผ์ง€๋Š” ๋ชปํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‘ ๊ฐ€์ง€๋ฅผ ๋™์‹œ์— ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ๋ฌธ์ œ๊ฐ€ ์—†์„ ๊ฑฐ๋ผ๊ณ  ํŒ๋‹จํ–ˆ์Šต๋‹ˆ๋‹ค.

๐Ÿš€ babel-loader

babel-loader๋Š” babel์„ ์‚ฌ์šฉํ•˜์—ฌ ๋นŒ๋“œ๋ฅผ ์ง„ํ–‰ํ•˜๋Š” ๋กœ๋”์ž…๋‹ˆ๋‹ค.

module.exports = {
  ...
  module: {
    rules: [
      {
        test: /\.tsx?$/,
        use: {
          loader: 'babel-loader',
          options: {
            presets: [
              '@babel/preset-env',
              '@babel/preset-react',
              '@babel/preset-typescript',
            ],
          },
        },
      },
    ],
  },
};

๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฐ”๋ฒจ์€ ๋นŒ๋“œ ์‹œ ํƒ€์ž…์„ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค. ๋ณ„๋„์˜ ํƒ€์ž… ์ฒดํ‚น ๊ณผ์ •์ด ์—†๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋•Œ๋ฌธ์— ํƒ€์ž…์—์„œ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋”๋ผ๋„ ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฐ”๋ฒจ์€ ํ•ด๋‹น ์—๋Ÿฌ๋ฅผ ์žก์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ ‡๊ธฐ์— ๋ณ„๋„์˜ ํƒ€์ž… ์ฒดํ‚น ๊ณผ์ •์ด ํ•„์š”ํ•˜๋‹ค๋ฉด ์•ž์„œ ๋ณด์•˜๋˜ fork-ts-checker-webpack-plugin๋‚˜ tsc๋ฅผ ํ™œ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.


์ด๋ ‡๊ฒŒ๋งŒ ๋ณธ๋‹ค๋ฉด babel-loader์˜ ์žฅ์ ์€ ํƒ€์ž…์„ ์ œ๊ฑฐํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋นŒ๋“œ ์‹œ๊ฐ„์ด ts-loader๋ณด๋‹ค ๋น ๋ฅด๋‹ค๋Š” ๊ฒƒ๋ฐ–์— ์—†๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์‚ฌ์‹ค babel-loader์˜ ๊ฐ€์žฅ ํฐ ์žฅ์ ์€ ํ™•์žฅ์— ์šฉ์ดํ•˜๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์•ž์„œ ๋งํ–ˆ๋‹ค์‹œํ”ผ babel-loader๋Š” babel์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. babel์—๋Š” ์ ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ๋“ค์ด ๋งŽ์Šต๋‹ˆ๋‹ค. ์ผ€์ด์Šค๋ณ„๋กœ ๋‹ค๋ฅด๊ฒ ์ง€๋งŒ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์ž˜ ์ ์šฉํ•˜๋ฉด ์˜คํžˆ๋ ค ๋‹ค๋ฅธ ๋กœ๋”๋ณด๋‹ค ๋” ์ข‹์€ ๋ฐฉ์‹์œผ๋กœ ํ”„๋กœ์ ํŠธ ์„ค์ •์„ ํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํ˜น์‹œ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์ œ์™ธํ•˜๊ณ  ๋ณ„๋„์˜ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์ถ”๊ฐ€๋กœ ์ ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด, ๋ฐ‘์—์„œ ๋‹ค๋ฃจ๋Š” esbuild-loader๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋นŒ๋“œ ์†๋„์— ์žˆ์–ด์„œ ๋” ์ข‹์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ esbuild-loader๋„ ์ œ๊ณตํ•˜๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ๋Š˜์–ด๋‚˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ณธ์ธ์ด ํ•„์š”ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์ œ๊ณตํ•˜๊ณ  ์žˆ๋‹ค๋ฉด esbuild-loader๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒŒ ํ›จ์”ฌ ํšจ์šฉ์ ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.


๋งŒ์•ฝ babel-loader์˜ ์†๋„๋ฅผ ๋” ๋†’์ด๊ณ  ์‹ถ๋‹ค๋ฉด ์บ์‹œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋กœ๋” ์˜ต์…˜ ์ค‘ cacheDirectory๋ฅผ ์„ค์ •ํ•ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค. (๊ธฐ๋ณธ๊ฐ’์€ false์ž…๋‹ˆ๋‹ค.) ์ฐธ๊ณ 

๐Ÿš€ esbuild-loader

๋งˆ์ง€๋ง‰์œผ๋กœ esbuild-loader์ž…๋‹ˆ๋‹ค. esbuild-loader๋Š” Go ์–ธ์–ด๋กœ ์ œ์ž‘๋œ esbuild๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์†๋„๊ฐ€ ๋งค์šฐ ๋น ๋ฆ…๋‹ˆ๋‹ค.

module.exports = {
  ...
  module: {
    rules: [
      {
        test: /\.tsx?$/,
        use: {
          loader: 'esbuild-loader',
          options: {
            loader: 'tsx',
            target: 'esnext',
          },
        },
      },
    ],
  },
};

esbuild๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์บ์‹œ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ถ€ ๋ฐ์ดํ„ฐ๊ฐ€ ์บ์‹œ๋˜๊ณ , ๋งˆ์ง€๋ง‰ ๋นŒ๋“œ ์ดํ›„ ์›๋ณธ ํŒŒ์ผ์ด ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ์บ์‹œ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์žฌ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ์— ๋‘ ๋ฒˆ์งธ ๋นŒ๋“œ ์‹œ๋ถ€ํ„ฐ๋Š” ์ผ๋ฐ˜ ๋นŒ๋“œ๋ณด๋‹ค ๋” ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค.


๊ทธ๋ฆฌ๊ณ  esbuild-loader์˜ ๊ฒฝ์šฐ ESBuildMinifyPlugin๋„ ์ง€์›ํ•˜๋Š”๋ฐ์š”. ๊ธฐ๋ณธ์ ์ธ terser-plugin๋ณด๋‹ค ์งง์€ ์‹œ๊ฐ„์ด ์†Œ์š”๋ฉ๋‹ˆ๋‹ค.

const { ESBuildMinifyPlugin } = require('esbuild-loader');

module.exports = {
  ...,
  optimization: {
    minimizer: [
      new ESBuildMinifyPlugin({
        target: 'esnext',
        css: true,  // ์ด ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด css์˜ minify๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
      }),
    ],
  },
};

์‹ค์ œ๋กœ ์ œ๊ฐ€ ํ…Œ์ŠคํŠธํ–ˆ์„ ๋•Œ ๋ชจ๋“  ์˜ต์…˜์„ ์ ์šฉ ํ›„ esbuild-loader + fork-ts-checker-webpack-plugin๊ณผ ts-loader๋ฅผ ๋น„๊ตํ–ˆ์„ ๋•Œ ์•ฝ 1/3 ๊ฐ€๋Ÿ‰ ๋นŒ๋“œ ์‹œ๊ฐ„์ด ์ค„์–ด๋“  ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

๐Ÿš€ ๊ฒฐ๋ก 

์ œ๊ฐ€ ๋‚ด๋ฆฐ ๊ฒฐ๋ก ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ๊ธฐ๋ณธ์ ์œผ๋กœ๋Š” ์†๋„๊ฐ€ ๋น ๋ฅธ esbuild-loader๋ฅผ ์‚ฌ์šฉ
  • ํƒ€์ž… ์ฒดํ‚น ์‹œ ๊ฐœ๋ฐœ ๋ชจ๋“œ์—์„œ๋Š” fork-ts-checker-webpack-plugin, ๋ฐฐํฌ ๋ชจ๋“œ์—์„œ๋Š” tsc ์‚ฌ์šฉ

ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค!