빌드(Build) - Grunt와 Gulp

빌드(Build) - Grunt와 Gulp

프론트엔드 코드와 에셋을 자동으로 빌드하기 위해, Grunt, Gulp, Browserify, Webpack 등의 Build Tool들을 사용할 수 있다. 이 중 Grunt와 Gulp는 여러 작업들을 자동화하는 Task Runner로서, 예를 들어, Sass를 CSS로 변환하거나, TypeScript들을 컴파일하거나, 여러 JavaScript들을 하나로 번들하거나, 소스파일을 minify 하거나, 이미지를 최적화하여 줄이거나 하는 등의 일을 할 수 있다. 여기서는 grunt/gulp를 사용하여 TypeScript 컴파일을 자동화하는 부분에 대해 알아본다.

Grunt

Grunt를 사용하기 위해서는 먼저 grunt 명령을 실행하는데 사용되는 "grunt-cli"를 설치한다.

    C> npm install -g grunt-cli 

Grunt는 실행할 Task에 대해 각각 플러그인을 가지는데, 자신에게 필요한 플러그인을 프로젝트 폴더 안의 package.json에 추가한 후, "npm install"을 실행하면, 필요한 Dependecy 파일들이 프로젝트로 폴더 안의 node_modules에 설치된다. 아래는 흔히 사용되는 플러그인을 설치하기 위한 package.json 파일의 예이다. TypeScript를 위한 grunt 플러그인으로 grunt-ts를 사용하는데, 아래에서 맨 마지막에 추가되어 있다.

    {
        "devDependencies": {
          "grunt": "^0.4.5",                    // Grunt 코어 모듈
          "grunt-contrib-cssmin": "~0.10.0",    // CSS minify
          "grunt-contrib-sass": "^0.7.3",       // Sass 처리
          "grunt-contrib-concat": "^0.5.0",     // Javascript concatenation
          "grunt-contrib-uglify": "^0.5.0",     // Javascript minify
          "grunt-ts": "^5.5.0"                  // TypeScript 플러그인 
        }
    }

다음으로 Grunt가 어떤 작업을 실행할 지를 Configuration 파일(Gruntfile.js)에 정의한다. 아래는 Gruntfile.js의 내용으로서, 여기서는 간단히 src 폴더에 있는 TypeScript 파일들을 컴파일하는 작업만을 정의하였다.

    module.exports = function(grunt) {
        grunt.initConfig({
            ts: {
                    default : {
                    src: ["src/*.ts"]
                }
            }
        });
        grunt.loadNpmTasks("grunt-ts");
        grunt.registerTask("default", ["ts"]);
    };    

위와 같이 모든 설정이 끝났으면, "grunt"를 실행하여 작업을 수행한다.

    C> grunt 
Gulp

Gulp는 Grunt와 비슷한 기능을 하는 빌드 도구로서, 먼저 gulp 명령을 실행하는데 사용되는 "gulp-cli"를 설치한다.

    C> npm install -g gulp-cli 

다음으로 프로젝트 폴더에서 "gulp"와 TypeScript를 위한 플러그인인 gulp-typescript을 설치한다.

    C> npm install gulp 
    C> npm install gulp-typescript

다음으로 아래와 같은 gulp 빌드 스크립트(gulpfile.js)를 작성한다. 여기서는 간단히 src 폴더에 있는 TypeScript 파일들을 컴파일하여 library.js 파일을 생성하는 작업을 수행한다.

    // gulpfile.js 
    var gulp = require("gulp");
    var ts = require("gulp-typescript");
    
    gulp.task("default", function () {
        var tsOut = gulp.src("src/*.ts")
            .pipe(ts({ out: "library.js"}));
        return tsOut.js.pipe(gulp.dest("build"));
    });

위와 같이 모든 설정이 끝났으면, "gulp" 명령을 사용하여 빌드를 실행한다. 위 코드에 따라 빌드 출력물로서 build/library.js가 생성된다.

    C> gulp 

참고: gulp 실행시 "Cannot find module 'typescript'" 에러가 나는 경우 아래를 실행해 본다.

    C> npm link typescript 
본 웹사이트는 광고를 포함하고 있습니다. 광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.