gulp (4 버전이상) 설정 및 사용 (feat. sass,localhost)

오래 전에 gulp 관련 포스팅을 하고 그 글을 보고 다시 한번 사용해 보려고 진행하는 데 달라진 점이 몇개 있어서 그냥 새로 공부한다 생각하고 플로그인 설치 및 사용을 정리해 보았다.

일단 gulp 부터 설치하자

npm install --save-dev gulp

이어서 사용할 플러그인들을 설치하자

npm install --save-dev gulp-uglify, gulp-sass, gulp-minify-css, del, browser-sync
  • gulp-uglify : js 압축
  • gulp-sass : SCSS 컴파일
  • gulp-minify-css : css 압축
  • del : 파일 삭제,
  • browser-sync : 서버화 시키기

이번에 셋팅한 목적은 scss 컴파일하고 기본적인 자바스크립트가 적용되며 로컬호스트로 서버화 시킨 뒤 css나 html, js 파일이 수정되면 브라우저에 자동으로 적용되게 하여 개발 작업을 용이하게 하려고 함이다.

이제 gulp 설정할 파일 gulpfile.js 를 생성해서 상단에 아래와 같이 정의한다.

var gulp = require('gulp'),
      uglify = require('gulp-uglify'),
      sass = require('gulp-sass'),
      minificss = require('gulp-minify-css'),
      del = require('del'),
      browserSync = require('browser-sync').create();

개발용 코드를 저장할 폴더 위치와 배포할 파일들의 위치 정의를 한다.
이 부분은 개인의 취향이니 스스로 판단하여 설정한다.

var devsrc = '.';
var pubsrc = '.';
var paths = {
    "dev" : {
        "css" : './scss/*.scss',
        "js" : './dev/js/*.js',
        "html" : './*.html'
    },
    "pub" : {
        "css" : pubsrc,
        "js" : pubsrc + '/js',
        "html" : pubsrc
    }
};

부득이 워드프레스 스킨 만들면서 서버로 싱크 맞추기 위해 위와 같이 설정했다.
폴더 구조는 스스로 설정함을 추천한다.

html 파일에 대한 처리

gulp.task('gulp_html', function(){
    return gulp.src(paths.dev.html)
    .pipe(browserSync.reload({ stream : true }));
});

js 파일에 대한 처리

gulp.task('gulp_js', function(){
      return gulp.src(paths.dev.js, {sourcemaps: true})
      .pipe(gulp.dest(paths.pub.js))
      .pipe(browserSync.reload({ stream : true }));
});

scss,css 에 대한 처리

gulp.task('gulp_css', function(){
      return gulp.src(paths.dev.css)
      .pipe(sass().on('error', sass.logError))
      .pipe(minificss())
      .pipe(gulp.dest(paths.pub.css))
      .pipe(browserSync.reload({ stream : true }));
});

이제 파일 변화를 감지하는 watch 넣기

gulp.task('gulp_watch', function(){
      gulp.watch(paths.dev.css, gulp.series('gulp_css'));
      gulp.watch(paths.dev.js, gulp.series('gulp_js'));
      gulp.watch(paths.dev.html, gulp.series('gulp_html'));
});

배포 파일 만들기 전 기존에 번들링된 파일 삭제하려고 아래처럼 삽입한다.

gulp.task('clean', function(){
    del([pubsrc + '/*.css']);
    del([pubsrc + '/js/*.js']);
});

이렇게 하면 배포 폴더 안의 css와 js 파일들을 다 지운다.

이제 로컬호스트를 실행해서 서버로 동작하게 만든다.

gulp.task('browserSync', function () {
      return browserSync.init({ port : 8001, server: { baseDir: './' } });
});

이제 cmd에서 gulp를 실행하면 개발 서버가 동작하여 번들링이 되며 로컬호스트로 개발 작업을 할 수 있게 하거나 gulp dev를 실행하면 기존 번들링 파일들을 삭제하고 새로이 번들링하도록 하는 코드를 삽입한다.

gulp.task('default', gulp.parallel('browserSync', 'gulp_html', 'gulp_css', 'gulp_js', 'gulp_watch'));
gulp.task('dev',gulp.parallel('clean','browserSync', 'gulp_html', 'gulp_css', 'gulp_js', 'gulp_watch'));

위 코드들 중에는 gulp.series 또는 gulp.parallel을 넣어 실행을 병렬로 할 것이냐 직렬로 할 것이냐가 버전 4 이상부터 적용되었다. 그래서 예전처럼 안썼다가는 gulp 오류가 난다.

TOP