Nest JS Hot reload ์„ค์ •ํ•˜๊ธฐ

2023. 7. 28. 23:03ใ†Study_Develop/์ธํ”„๋Ÿฐ - Slack ํด๋ก ์ฝ”๋”ฉ(๋ฐฑ์—”๋“œ)

๋ฐ˜์‘ํ˜•

Nest JS Hot reload ์„ค์ •ํ•˜๊ธฐ

 

https://docs.nestjs.com/recipes/hot-reload

 

Documentation | NestJS - A progressive Node.js framework

Nest is a framework for building efficient, scalable Node.js server-side applications. It uses progressive JavaScript, is built with TypeScript and combines elements of OOP (Object Oriented Programming), FP (Functional Programming), and FRP (Functional Rea

docs.nestjs.com

 

๊ณต์‹๋ฌธ์„œ ์ฐธ๊ณ  ใ…Žใ…Ž

 

 

Hot reload๋ž€?

 

nodemon ํ˜น์€ pm2 ์ฒ˜๋Ÿผ ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ๊ฒฐ๊ณผ๊ฐ€ ์›น์‚ฌ์ดํŠธ์— ๋ฐ”๋กœ๋ฐ”๋กœ ๋นŒ๋“œ๋˜๋„๋ก ์„œ๋ฒ„์˜ ์žฌ์‹œ์ž‘์„ ๋„์™€์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค.

 

cli๋ฅผ ์ด์šฉํ•˜์—ฌ Hot Reload ์„ค์น˜ํ•˜๊ธฐ

 

1. ํ•„์š”ํ•œ package์„ค์น˜

 

$ npm i --save-dev webpack-node-externals run-script-webpack-plugin webpack

 

์š”๋ ‡๊ฒŒ ์„ค์น˜ ํ•ด์ฃผ์„ธ์šฉ

 

2. ์„ค์น˜๊ฐ€ ์™„๋ฃŒ๋˜์—ˆ๋‹ค๋ฉด, ํ”„๋กœ์ ํŠธ์˜ root๋””๋ ‰ํ„ฐ๋ฆฌ์— webpack-hmr.config.js ํŒŒ์ผ ์ƒ์„ฑ ํ›„ ์•„๋ž˜์˜ ์ฝ”๋“œ๋ฅผ ๋ณต๋ถ™ํ•ด์ฃผ์„ธ์š”!

 

webpack-hmr.config.js

 

const nodeExternals = require('webpack-node-externals');
const { RunScriptWebpackPlugin } = require('run-script-webpack-plugin');

module.exports = function (options, webpack) {
  return {
    ...options,
    entry: ['webpack/hot/poll?100', options.entry],
    externals: [
      nodeExternals({
        allowlist: ['webpack/hot/poll?100'],
      }),
    ],
    plugins: [
      ...options.plugins,
      new webpack.HotModuleReplacementPlugin(),
      new webpack.WatchIgnorePlugin({
        paths: [/\.js$/, /\.d\.ts$/],
      }),
      new RunScriptWebpackPlugin({ name: options.output.filename, autoRestart: false }),
    ],
  };
};

 

 

3. Hot_Module๋Œ€์ฒดํ•˜๊ธฐ

 

์œ„์—์„œ ์ •์˜ํ•œ HMR์„ ํ™œ์„ฑํ™”ํ•˜๊ธฐ ์œ„ํ•ด main.tsํŒŒ์ผ๋กœ ์ด๋™ํ•˜์—ฌ ์•„๋ž˜์˜ ์ฝ”๋“œ ์ถ”๊ฐ€

 

main.ts

 

declare const module: any;

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

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

 

4. package.jsonํŒŒ์ผ ์ˆ˜์ •

 

"start:dev": "nest build --webpack --webpackPath webpack-hmr.config.js --watch"

 

5. ํ˜„์žฌ ์‹คํ–‰ ์ค‘์ธ ์„œ๋ฒ„๋ฅผ ์ข…๋ฃŒํ•˜๊ณ , ๋‹ค์‹œ ์‹œ์ž‘

 

$ npm run start:dev