TOOL/BUILDER 2016. 1. 17. 14:15

///// Nodejs (노드제이에스)


HTML, CSS, JS는 웹서비스의 핵심요소들이다.


이것들은 컴파일이 필요없지만,

파일을 최적화하고 생산성있게 개발할 수 있게 도와주는 도구들이 있다.


바로 Nodejs기반의 빌드툴 GruntGulp가 있다.

개인적으로는 Gulp가 더욱 보고 이해하기 쉬운 형태인 것 같아서 맘에 든다.

이 포스트에서는 Gulp에 대해 간단한 사용예를 적어 보았다.



Gulp 3에 도움이 될 수 있는 예제입니다.  

※ Gulp 4부터는 스크립트 작성이 다른 부분이 있습니다. 혼동을 피하기 위해 다른 도움글을 찾아보실 것을 권장합니다.




///// Gulp 3(걸프) 



1. 설치

1) 글로벌 설치

npm install -g gulp


2) 로컬에 설치 (프로젝트 루트로 이동하여 설치)

npm install --save-dev gulp


2. 플러그인 설치 (프로젝트 루트로 이동하여 필요한 플러그인 설치)

npm install --save-dev del gulp-rename gulp-jshint gulp-concat gulp-uglify gulp-csslint gulp-concat-css gulp-uglifycss gulp-minify-html gulp-livereload 


3. gulpfile.js 생성 예제

// 플러그인 로드

var gulp = require('gulp');

var del = require('del');

var rename = require('gulp-rename');

var jshint = require('gulp-jshint');

var concat = require('gulp-concat');

var uglify = require('gulp-uglify');

var csslint = require('gulp-csslint');

var concatcss = require('gulp-concat-css');

var uglifycss = require('gulp-uglifycss');

var minifyhtml = require('gulp-minify-html');

var livereload = require('gulp-livereload');


// 변수 지정

var src = 'public/src';

var dest = 'public/dist';

var jsFileNm = 'js.js';

var cssFileNm = 'css.css';

var fileSuffix = '.min';

var paths = {

"src":{

"js" : src + '/js/**/*.js',

"css" : src + '/css/**/*.css',

"res" : src + '/res/*',

"html": src + '/**/*.html'

},

"dest":{

"js" : dest + '/js',

"css" : dest + '/css',

"res" : dest + '/res',

"html": dest + '/'

}

};


//clean 작업 설정

gulp.task('clean', function(){

del([dest]);

});


//js 작업 설정

gulp.task('js', function(){

return gulp.src(paths.src.js)

.pipe(jshint())

.pipe(jshint.reporter('default'))

.pipe(concat(jsFileNm))

.pipe(stripDebug())

.pipe(uglify())

.pipe(rename({suffix:fileSuffix}))

.pipe(gulp.dest(paths.dest.js));

});


//css 작업 설정

gulp.task('css', function(){

return gulp.src(paths.src.css)

.pipe(csslint())

.pipe(csslint.reporter())

.pipe(concatcss(cssFileNm))

.pipe(uglifycss())

.pipe(rename({suffix:fileSuffix}))

.pipe(gulp.dest(paths.dest.css))

});


//res 작업 설정

gulp.task('res', function(){

return gulp.src(paths.src.res)

.pipe(gulp.dest(paths.dest.res))

});


//html 작업 설정

gulp.task('html', function(){

return gulp.src(paths.src.html)

.pipe(minifyhtml())

.pipe(gulp.dest(paths.dest.html))

});


//server 작업 설정

gulp.task('server', function(){

return gulp.src(dest + '/')

.pipe(webserver());

});


//watch 작업 설정

gulp.task('watch', function () {

livereload.listen();

gulp.watch(paths.src.js, ['js']);

gulp.watch(paths.src.css, ['css']);

gulp.watch(paths.src.html, ['html']);

gulp.watch(dest + '/**').on('change', livereload.changed);

});


gulp.task('default', ['server', 'js', 'css', 'html', 'watch']);

gulp.task('dev', ['clean', 'js', 'css', 'html', 'watch']);




4. 실행 (프로젝트 루트에 위의 gulpfile.js를 생성 후 명령)

- 명령

gulp js

* js라는 이름으로 정의된 task가 실행된다.


- 결과

1) public/src/js의 모든 js파일 오류 검사

2) 1)의 오류 검사 내역 출력

3) 파일 합치기(모든 js파일이 js.js파일로 합쳐짐)

4) 합친 파일의 alert()과 console.log() 제거

5) 파일 압축(최적화)

6) 파일 이름에 .min 덧붙이기 (js.js에서 js.min.js가 됨)

7) public/dist/js로 js.min.js파일이 이동됨)




- 명령

gulp

* default라는 이름으로 정의된 task가 실행된다.


- 결과

1) public/dist폴더를 localhost:8080 접속가능

2) clean작업 실행 (public/dist 폴더 삭제)

3) js작업 실행 (검사, 합침, 압축, 배포)

4) css작업 실행 (검사, 합침, 압축, 배포)

5) res작업 실행 (배포)

6) html작업 실행 (압축, 배포)

7) 소스 변경 감시 (변경되면 해당 작업 실행, public/dist폴더 안의 내용이 변경되면 브라우저 새로고침)




///// 유용한 플러그인


-JS

gulp-jshint        JS파일 오류 검사

gulp-concat        JS파일 하나로 합치기

gulp-uglify        JS파일 압축(최적화)


- CSS

gulp-csslint        CSS파일 오류 검사

gulp-concat-css    CSS파일 하나로 합치기

gulp-uglifycss     CSS파일 압축(최적화)


- HTML

gulp-minify-html    HTML 압축(최적화)


del            파일&폴더 삭제(지우기)

gulp-rename    파일 이름 고치기

gulp-if        pipe에서 조건에 따른 처리하기

gulp-webserver    웹서버 실행

gulp-livereload    브라우저 새로고침 



※ LiveReload

Chrome을 실행하고 Chrome Store에서 livereload plugin을 설치하면 주소창 오른쪽에 livereload 버튼이 생긴다. 

그걸 ON 시켜주면 적용 된다.(동그라미 안의 동그라미가 검정색으로 칠해지면 ON이다.)

적용되면 소스가 바뀔때 마다 자동으로 새로고침을 해준다. 짱신기 >_< ㅋㅋ





///// 참고

Gulp.js에 대해 알아보자: http://horajjan.blog.me/220342038306

Gulp 입문 1 - Gulp에 대한 소개: http://programmingsummaries.tistory.com/356

Gulp 입문 2 - Gulp 익히기: http://programmingsummaries.tistory.com/377

'TOOL > BUILDER' 카테고리의 다른 글

[Gulp] uglify toplevel  (0) 2016.04.13
[Gulp] gulp-shell 걸프에서도 쉘스크립트가 가능하다.  (0) 2016.02.09
[GRUNT 0.4.x] Gruntfile.js  (0) 2016.01.02
[GRUNT 0.4.x] 모듈 설치  (0) 2016.01.02
[Maven] tomcat:run  (0) 2015.12.30