정적 HTML 페이지를 개발할 일이 생겨서 7년만에 다시 gulp를 찾아보았다.
기존에 사용하던거는 Node6 기반이고 너무 오래되어서 못쓸 것 같아서 가볍게 다시 작성해보았다.
<aside> 💡 전체 샘플 코드는 아래 리포지토리를 참고하시길 바랍니다. https://github.com/croot-dev/gulp-sample
</aside>
mkdir myproject && cd myproject
yarn init
yarn init v1.22.19
question name:
question version (1.0.0):
question description:
question entry point:
question repository url:
question author:
question license:
question private:
success Saved package.json
✨ Done in 28.52s.
yarn add gulp gulp-clean gulp-file-include browser-sync -D
src/
|- includes/
|- |- head.html
|- |- header.html
|- `- footer.html
|- scss/
|- `- main.scss
|- pages/
|- `- index.html
`-assets/
`- scripts/
`- jquery.js
// Gulpfile.js
const gulp = require('gulp');
const include = require('gulp-file-include');
const server = require('browser-sync').create();
const { watch, series } = require('gulp');
// 경로 상수 선언.
const PATH = {
SRC: './src',
SRC_HTML: './src/pages/**/*.html',
SRC_ASSETS: `./src/assets/**/*`,
DIST: './dist'
}
// 정적 리소스 파일 복사.
async function buildAssets() {
gulp.src([PATH.SRC_ASSETS])
.pipe(gulp.dest(PATH.DIST));
}
// HTML 파일 include 적용.
async function buildHTML() {
gulp.src([PATH.SRC_HTML])
// include partials
.pipe(include({
prefix: '@',
basepath: 'src/includes'
}))
.pipe(gulp.dest(PATH.DIST));
}
// 로컬 서버 자동 리로드.
async function reload() {
server.reload();
}
exports.default = async function() {
buildHTML();
buildAssets();
server.init({
server: {
baseDir: PATH.DIST
}
});
// 변경 감지 시 마다 자동으로 재실행.
watch([`${PATH.SRC}/**/*`], series(buildHTML, buildAssets, reload));
};
// clean directories
const clean = require('gulp-clean');
exports.clean = function () {
return gulp.src([PATH.DIST], { read: false, allowEmpty: true })
.pipe(clean());
}
# 작성 Task 실행
yarn gulp
# 산출 폴더 제거 실행 시
yarn gulp clean