react-hot-loader 적용하기

react-hot-loader 는 코드가 변경되었을 때 페이지를 새로고침하지 않고 바뀐부분만 빠르게 교체해주는 라이브러리입니다. 비록, 리액트 어플리케이션을 개발 할 때 필수적인 개발도구는 아니지만, 앱의 규모가 커지면 개발서버가 수정될때마다 새로고침이 된다면 딜레이가 발생되어 개발의 흐름이 중간중간 1~6초씩 끊길 수도 있습니다. 특히, styled-components 를 사용하게 되는 경우엔, 스타일이 JS 안에 있어서, 스타일을 수정 할 때마다 새로고침이 된다는게 조금 불편할수도 있겠죠.

이렇게 자바스크립트 코드의 일부분만 교체하는 기능은 웹팩 개발서버의 기능이기 때문에, 라이브러리 없이도 코드를 조금 건들여주면 가능합니다. 하지만, 어플리케이션의 state 를 계속 유지하려면 과정이 복잡하기 때문에 라이브러리의 힘을 빌릴 필요가 있습니다.

설치하기

yarn eject 를 하고, react-hot-loader 를 설치하세요.

$ yarn eject
$ yarn add --dev react-hot-loader

설치가 완료된 다음에는, config/webpack.config.dev.js 에서 다음과 같이 babel 설정하는 부분을 변경해주세요.

package.json

  {
    test: /\.(js|jsx|mjs)$/,
    include: paths.appSrc,
    loader: require.resolve('babel-loader'),
    options: {

      // This is a feature of `babel-loader` for webpack (not Babel itself).
      // It enables caching results in ./node_modules/.cache/babel-loader/
      // directory for faster rebuilds.
      cacheDirectory: true,
      plugins: ['react-hot-loader/babel'],
    },
  },

만약에 자신이 eject 를 하기 싫다! 그렇다면 https://github.com/cdharris/react-app-rewire-hot-loader 를 참고해보세요.

hot 설정하기

그 다음엔, 프로젝트의 최상위 컴포넌트(지금의 경우엔 App 이 되겠죠?) 에서 hot 을 불러온 뒤 내보낼 때 hot(module)(App) 형식을 작성해주시면 됩니다.

import React, { Component } from 'react';
import logo from './logo.svg';
import './App.css';
import { hot } from 'react-hot-loader'

class App extends Component {
  render() {
    return (
      <div className="App">
        <header className="App-header">
          <img src={logo} className="App-logo" alt="logo" />
          <h1 className="App-title">Welcome to React</h1>
        </header>
        <p className="App-intro">
          To get started, edit <code>src/App.js</code> and save to reload!
        </p>
      </div>
    );
  }
}

export default hot(module)(App);

정리

벌써 끝났습니다! react-hot-loader v4 가 되면서 작업이 굉장히 간단해졌습니다. 이전에는 설정해야 할 것이 꽤 있었거든요. 저의 경우에는 실무에서 react-hot-loader 를 잘 사용하지 않습니다. 개발을 하게 될 때 없어도 별로 큰 지장이 되지 않거든요 (어짜피 페이지는 파일 저장하면 새로고침이 트리거되기 때문입니다). 만약에 프로젝트에서 사용을 하게 된다면, 코드를 저장 할 때마다 페이지를 새로고침하는것이 거슬리기 시작 할 때 쯤 도입을 하는것을 추천드립니다.

results matching ""

    No results matching ""