Hot Reload (Webpack)

Hot Reload (Webpack)

μ‘μš© ν”„λ‘œκ·Έλž¨μ˜ λΆ€νŠΈ 슀트랩 ν”„λ‘œμ„ΈμŠ€μ— κ°€μž₯ 큰 영ν–₯을 λ―ΈμΉ˜λŠ” 것은 TypeScript μ»΄νŒŒμΌμž…λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ λ¬Έμ œλŠ” 변경이 λ°œμƒν•  λ•Œλ§ˆλ‹€ 전체 ν”„λ‘œμ νŠΈλ₯Ό λ‹€μ‹œ μ»΄νŒŒμΌν•΄μ•Όν•©λ‹ˆκΉŒ? μ „ν˜€ μ•„λ‹™λ‹ˆλ‹€. κ·Έλ ‡κΈ° λ•Œλ¬Έμ— webpack HMR (Hot-Module Replacement)은 μ‘μš© ν”„λ‘œκ·Έλž¨μ„ μΈμŠ€ν„΄μŠ€ν™” ν•˜λŠ” 데 ν•„μš”ν•œ μ‹œκ°„μ„ 크게 μ€„μž…λ‹ˆλ‹€.

Installation

λ¨Όμ € ν•„μš”ν•œ νŒ¨ν‚€μ§€λ₯Ό μ„€μΉ˜ν•˜μž:

$ npm i --save-dev webpack webpack-cli webpack-node-externals ts-loader

Configuration

그런 λ‹€μŒ μ›ΉνŒ©μ˜ ꡬ성 파일 인 webpack.config.jsλ₯Ό λ§Œλ“€μ–΄ 루트 디렉토리에 μ €μž₯ν•΄μ•Όν•©λ‹ˆλ‹€.

const webpack = require('webpack');
const path = require('path');
const nodeExternals = require('webpack-node-externals');

module.exports = {
  entry: ['webpack/hot/poll?100', './src/main.ts'],
  watch: true,
  target: 'node',
  externals: [
    nodeExternals({
      whitelist: ['webpack/hot/poll?100'],
    }),
  ],
  module: {
    rules: [
      {
        test: /.tsx?$/,
        use: 'ts-loader',
        exclude: /node_modules/,
      },
    ],
  },
  mode: 'development',
  resolve: {
    extensions: ['.tsx', '.ts', '.js'],
  },
  plugins: [new webpack.HotModuleReplacementPlugin()],
  output: {
    path: path.join(__dirname, 'dist'),
    filename: 'server.js',
  },
};

이 ꡬ성은 μ›ΉνŒ©μ— μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ— λŒ€ν•œ λͺ‡κ°€μ§€ ν•„μˆ˜ 사항을 μ•Œλ €μ€λ‹ˆλ‹€. 어디에 μ—”νŠΈλ¦¬ 파일이 있고, 컴파일 된 νŒŒμΌμ„ λ³΄μœ ν•˜κΈ° μœ„ν•΄ μ–΄λ–€ 디렉토리λ₯Ό μ‚¬μš©ν•΄μ•Ό ν•˜λ©°, μ†ŒμŠ€ νŒŒμΌμ„ μ»΄νŒŒμΌν•˜κΈ° μœ„ν•΄ μ–΄λ–€ μ’…λ₯˜μ˜ λ‘œλ”λ₯Ό μ‚¬μš©ν•˜κΈΈ μ›ν•˜λŠ”μ§€. 기본적으둜 κ±±μ •ν•  ν•„μš”κ°€ μ—†μœΌλ©° 이 파일의 λ‚΄μš©μ„ μ „ν˜€ 이해할 ν•„μš”κ°€ μ—†μŠ΅λ‹ˆλ‹€.

Hot-Module Replacement

HMR을 ν™œμ„±ν™”ν•˜λ €λ©΄ Nest μ‘μš© ν”„λ‘œκ·Έλž¨ ν•­λͺ© 파일 (main.ts)을 μ—΄κ³  λͺ‡ 가지 μ€‘μš”ν•œ 사항을 μΆ”κ°€ν•΄μ•Όν•©λ‹ˆλ‹€.

declare const module: any;

async function bootstrap() {
  const app = await NestFactory.create(ApplicationModule);
  await app.listen(3000);

  if (module.hot) {
    module.hot.accept();
    module.hot.dispose(() => app.close());
  }
}
bootstrap();

그리고 그게 μ „λΆ€μž…λ‹ˆλ‹€. μ‹€ν–‰ ν”„λ‘œμ„ΈμŠ€λ₯Ό λ‹¨μˆœν™”ν•˜λ €λ©΄ package.json 파일의 scripts에 이 두 쀄을 μΆ”κ°€ν•˜μ‹­μ‹œμ˜€.

"start": "node dist/server",
"webpack": "webpack --config webpack.config.js"

이제 λͺ…λ Ή 행을 μ—΄κ³  μ•„λž˜ λͺ…령을 μ‹€ν–‰ν•˜μ‹­μ‹œμ˜€ :

$ npm run webpack

μ›ΉνŒ©μ΄ 파일 watch λ₯Ό μ‹œμž‘ν•˜λ©΄ λ‹€λ₯Έ λͺ…λ Ήν–‰ μ°½μ—μ„œ λ‹€λ₯Έ λͺ…령을 μ‹€ν–‰ν•˜μ‹­μ‹œμ˜€.

$ npm run start

μ‹€μ œ μ‚¬λ‘€λŠ” μ—¬κΈ°μ—μ„œ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

Last updated

Was this helpful?