231228 개발일지 TIL - Grunt-contrib-watch 플러그인의 LiveReload 기능

The Web On Everything·2023년 12월 27일
0

개발일지

목록 보기
231/269

express 관리자 서버 코드를 확인 하던 중 알아보게 되었다.

Grunt-contrib-watch 플러그인의 LiveReload 기능

Grunt
JavaScript 기반의 자동화 도구로, 프론트엔드 및 웹 개발에서 반복적인 작업을 자동화하고 효율적으로 수행할 수 있도록 도와주는 도구이다. Grunt는 다양한 작업을 실행하고 관리하는 데 사용되며, 이러한 작업에는 파일 병합, 파일 압축, 코드 검증, 이미지 최적화, 로컬 서버 시작, LiveReload와 같은 기능을 포함할 수 있다.

[특징]
    
Task Runner: Grunt는 개발 작업을 자동화하기 위해 tasks를 정의하고 실행하는 데 사용된다. 이러한 tasks는 JavaScript 코드로 작성되며, 필요한 동작을 구현한다.

플러그인 생태계: Grunt는 플러그인을 활용하여 다양한 작업을 수행한다. Grunt의 플러그인 생태계는 다양하며, 프로젝트에 필요한 작업을 수행하기 위한 다양한 플러그인을 사용할 수 있다. 예를 들어, CSS 파일을 병합하고 압축하기 위한 플러그인, JavaScript 코드를 검증하고 압축하기 위한 플러그인, 이미지 최적화를 수행하기 위한 플러그인 등이 있다.

설정 파일: Grunt는 Gruntfile.js라는 설정 파일을 사용하여 어떤 작업을 수행할 것인지 정의한다. 이 파일에는 사용할 플러그인 및 작업의 설정이 포함된다.

커맨드 라인 인터페이스 (CLI): Grunt CLI를 사용하여 명령줄에서 Grunt 태스크를 실행할 수 있습니다. 이를 통해 개발자는 터미널에서 간단하게 작업을 실행하고 관리할 수 있다.

Grunt는 프론트엔드 개발에서 자주 사용되며, 프로젝트 빌드, 코드 최적화, 테스트 실행, 개발 서버 구축 등의 작업을 자동화하여 개발 프로세스를 향상시킬 수 있다. Grunt 외에도 Gulp, Webpack, Parcel 등의 다른 자동화 도구도 있으며, 프로젝트의 요구 사항에 맞게 선택할 수 있다.

Grunt-contrib-watch
Grunt 빌드 도구의 플러그인 중 하나로, 파일 변경을 감지하고 해당 변경 사항에 대한 작업을 수행하는 데 사용된다. 이 플러그인은 빌드 및 개발 프로세스를 자동화하고 개발자에게 더 효율적인 개발 환경을 제공하는 데 도움이 된다. 이 플러그인의 중요한 기능 중 하나는 LiveReload 서버를 통해 파일 변경 사항을 실시간으로 반영하는 것이다.

LiveReload 서버 설정

'use strict';

const tinylr = require('tiny-lr');
const _ = require('lodash');

// 서버를 저장하는 객체
const servers = Object.create(null);

module.exports = function(grunt) {
  // 기본 설정
  const defaults = { port: 35729 };

  function LR(options) {
    // 옵션 처리
    if (options === true) {
      options = defaults;
    } else if (typeof options === 'number') {
      options = { port: options };
    } else {
      options = _.defaults(options, defaults);
    }

    const host = (options.host || '*') + ':' + options.port;

    // 이미 실행 중인 서버 사용 또는 새로운 서버 시작
    if (servers[host]) {
      this.server = servers[host];
    } else {
      this.server = tinylr(options);
      // 에러 핸들링
      this.server.server.removeAllListeners('error');
      this.server.server.on('error', function(err) {
        if (err.code === 'EADDRINUSE') {
          grunt.fatal('Port ' + options.port + ' is already in use by another process.');
        } else {
          grunt.fatal(err);
        }
        process.exit(1);
      });
      // 서버 시작
      this.server.listen(options.port, options.host, function(err) {
        if (err) {
          return grunt.fatal(err);
        }
        grunt.log.verbose.writeln('Live reload server started on ' + host);
      });
      servers[host] = this.server;
    }
  }

  // 파일 변경 시 LiveReload 트리거
  LR.prototype.trigger = function(files) {
    grunt.log.verbose.writeln('Live reloading ' + grunt.log.wordlist(files) + '...');
    this.server.changed({ body: { files: files } });
  };

  return function(options) {
    return new LR(options);
  };
};

이 코드는 LiveReload 서버를 설정하고 파일 변경을 감지하는 핵심적인 기능을 제공해준다. 코드 내부에서는 옵션 처리, 서버 관리, 에러 핸들링, 서버 시작 및 파일 변경 감지에 관한 로직이 구현되어 있다.

결론
grunt-contrib-watch 플러그인을 사용하면 파일 변경 사항을 실시간으로 감지하고 이를 효과적으로 처리할 수 있다. 이를 통해 개발 프로세스가 더 효율적으로 진행되며, 개발자는 실시간으로 변경 사항을 확인할 수 있다.

Grunt-contrib-watch 플러그인은 파일 변경 사항을 실시간으로 반영하는 데 도움이 되는 강력한 도구 중 하나로 더 많은 Grunt 플러그인과 함께 사용하면 프로젝트를 자동화하고 개발 생산성을 향상시킬 수 있다.

profile
오늘은 무슨 오류를 만날까?! 널 만나러 가는 길~ LOL

0개의 댓글