그알못을 위한 Grunt로 Hello World하기

  1. 예제 실행

 

* 목표 : grunt를 이용하여 c:/examples/SomeProject 디렉토리의 밑에 html / css / js 디렉토리 3개를 생성해본다.

 

1) package.json 파일 생성

– npm init 명령 입력

– 위 명령을 통해 package.json 파일을 생성한다. 이 파일은 현재 애플리케이션의 패키지 관리를 위한 설정 파일이다.

– 비어있는 기본 양식 파일을 만든다는 생각을 하면 된다.

– 더이상 대문자는 사용할 수 없게 변경되었으므로, name은 그냥 name이라고 치고 넘어가자.

– 나머진 전부 엔터친다. 걍 빈 양식파일을 만들면 그것으로 족하다.

 

2) npm을 이용한 grunt 설치

– npm install grunt –save-dev 명령 입력

– 노드의 모듈인 grunt를 설치한다.

– –save-dev옵션은 의존성 중에서도 devDependencies로 들어가게 된 옵션이다.

– 위에서 만든 pagkage.json의 devDependencies key 밑으로 자동으로 입력되게 된다.

– 일반 dependencies와는 다르다. 뭐가 다른지는 향후 다른 자료로 업로드 계획

 

3) grunt 실행 전 준비

– 알다시피 grunt는 node의 모듈이다.

– 현재 디렉토리(grunt가 설치된 디렉토리)에서 grunt를 입력하면, 같은 위치에 존재하는 Gruntfile.js파일을 찾아 수행하게 된다.

– 만약 파일이 없는 상태에서 grunt t 라는 명령어를 입력하면 “Fatal error: Unable to find Gruntfile.” 과 같은 에러가 발생한다.

– Gruntfile.js를 비어있는 상태로 만든 뒤(touch 또는 copy con 이용) 같은 명령어를 입력하면, “Warning: Task “t” not found. Use –force to continue. Aborted due to warnings.” 이라는 에러가 발생한다.

– grunt역시 node와 같은 인터프리터로 생각하면 될 것이며, grunt가 이해할 수 있는 문법으로 Gruntfile.js를 작성해 놓아야만 실행되게 된다!

 

4) Gruntfile.js 작성 기초

– 빈 파일에서부터 시작해보자.

– Gruntfile.js에 다음 코드를 추가한다.

– module.exports = function(grunt){ grunt.registerTask(‘f’, []); };

– 위 코드에 exports된 function 자체에 첫번째 인자로 grunt를 넣으면 자동으로 grunt 모듈을 사용할 수 있으며

– 함수 내부에서 그 객체를 이용하여 스크립트를 작성할 수 있다.

– grunt.registerTask(‘f’, []); 이 문장은, 말 그대로 grunt의 task를 등록하는 개념으로 사용된다. 첫번째 인자는 이름이고, 두번째 인자는 수행 항목들(배열)이다.

– 수행 항목들은 규칙에 맞는 배열 내 객체들이라면 무엇이든 여러개를 연속해서 나열할 수 있다.

– 위와 같이 파일을 작성한 뒤 실행해보자. Done. 이라는 메시지가 콘솔에 출력된다.

– 일반적으로 Gruntfile.js 는 아래와 같은 구조를 가진다.

 

   module.exports = function(grunt){

       grunt.loadNpmTasks(…);

       grunt.initConfig(…);

       grunt.registerTask(…);

   };

 

5) grunt로 쉘 스크립트 실행. (윈도우에서도 사용할 수 있다!!)

– 이것은 grunt의 플러그인을 사용하여 수행할 수 있다. (뭐 직접 만들어도 되겠지만..우선 받아서 사용해보자.)

– 패키지명은 grunt-shell이다.

– npm install grunt-shell –save-dev 명령어를 수행하여 설치한다.

– 이제 grunt에서 shell이라는 플러그인을 사용할 수 있다.

– 이 플러그인은 Gruntfile.js의 grunt.initConfig 메소드 내의 객체로 하나를 정의하여 실행시키도록 할 수 있다.

– Gruntfile.js를 아래와 같이 작성해본다.

 

module.exports = function(grunt){

        //grunt가 추가적으로 loading시킬 npm modules for grunt 리스트.
        grunt.loadNpmTasks('grunt-shell');

        //loadNpmTasks로 불러들여온 grunt 모듈의 task들을 아래에서 호출.
        grunt.initConfig({
            shell: {
                makeDir: {
                    command: [
                        'mkdir javascript',
                        'mkdir css',
                        'mkdir html'
                    ].join('&&')
                },
                delDir: {
                    command: [
                        'rmdir javascript',
                        'rmdir css',
                        'rmdir html'
                    ].join('&&')
                }
            }
        });

        //사용자 정의 task를 등록하여 이름을 지정, 커맨드라인에서 호출할 수 있게 함.
        grunt.registerTask('make', ['shell:makeDir']);
        grunt.registerTask('del', ['shell:delDir']);
    };

 

– cmd(또는 shell)에서 grunt make 입력 후 엔터 시 다음과 같은 메시지 확인 가능

   Running “shell:makeDir” (shell) task

   

   Done.

 

– dir(또는 ls -al) 명령어를 통해 디렉토리가 잘 생성되었는지 확인

– grunt del 입력 후 실행시켜 생성되어있던 디렉토리가 삭제되었는지 확인

– Hello World 종료!

 

  1. 기타 grunt 플러그인

1) grunt-contrib-connect : 파일 지원용 서버 (Grunt를 서버로 동작하게 만들어준다)

2) grunt-contrib-watch : 파일의 변화를 감지해서 무언가 해주기 위한 플러그인

 

You may also like...

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다.