gulp 정리
gulp
- node.js 기반의 task runner
- 반복적인 귀찮은 작업들이나 프론트엔드 빌드에 필요한 작업들을 gulp 통해 쉽게 처리
gulp에서 task는 어떻게 만들수 있나.
function을 export 하거나 const를 하면 됨.
- 반복적인 귀찮은 작업들이나 프론트엔드 빌드에 필요한 작업들을 gulp 통해 쉽게 처리
function을 export 하거나 const를 하면 됨.
gulp는 task와 함께 동작함
task란?
ex)pug 파일을 html로 변경한 다음 다른 폴더에 집어 넣는거, scss파일들을 가지고 css파일로 변환해서 코드를 최소화 하고 css라는 폴더에 집어 넣는거,
//gulpfile.js
import gulp from 'gulp';
import gpug from 'gulp-pug';
const routes = {
pug: {
src: 'src/*.pug',
dest: 'build',
},
};
export const pug = () =>
gulp.src(routes.pug.src).pipe(gpug()).pipe(gulp.dest(routes.pug.dest));
export const dev = gulp.series([pug]);
task를 잘못했을 때 잘 삭제하지 않으면 충돌해서 오류가 발생할 수 있음. 그래서 아래와 같이 작성하면 충돌없이 잘 삭제할 수 있다.
import gulp from 'gulp';
import gpug from 'gulp-pug';
import del from 'del';
const routes = {
pug: {
src: 'src/*.pug',
dest: 'build',
},
};
const pug = () =>
gulp.src(routes.pug.src).pipe(gpug()).pipe(gulp.dest(routes.pug.dest));
const clean = () => del(['build']);
const prepare = gulp.series([clean]);
const assets = gulp.series([pug]);
export const dev = gulp.series([prepare, assets]);
webserver 설정하고 파일 실시간 업데이트 하기.
import gulp from 'gulp';
import gpug from 'gulp-pug';
import del from 'del';
import ws from 'gulp-webserver';
const routes = {
pug: {
watch: 'src/**/*.pug',
src: 'src/*.pug',
dest: 'build',
},
};
const pug = () =>
gulp.src(routes.pug.src).pipe(gpug()).pipe(gulp.dest(routes.pug.dest));
const clean = () => del(['build/']);
const webserver = () =>
gulp.src('build').pipe(ws({ livereload: true, open: true }));
const watch = () => {
gulp.watch(routes.pug.watch, pug);
};
const prepare = gulp.series([clean]);
const assets = gulp.series([pug]);
// series는 순차적으로 실행하는 반면 parallel은 동시에 실행한다.
const postDev = gulp.parallel([webserver, watch]);
export const dev = gulp.series([prepare, assets, postDev]);
이미지 설정
import gulp from 'gulp';
import gpug from 'gulp-pug';
import del from 'del';
import ws from 'gulp-webserver';
import image from 'gulp-image';
const routes = {
pug: {
watch: 'src/**/*.pug',
src: 'src/*.pug',
dest: 'build',
},
img: {
src: 'src/img/*',
dest: 'build/img',
},
};
const pug = () =>
gulp.src(routes.pug.src).pipe(gpug()).pipe(gulp.dest(routes.pug.dest));
const clean = () => del(['build/']);
const webserver = () =>
gulp.src('build').pipe(ws({ livereload: true, open: true }));
const img = () =>
gulp.src(routes.img.src).pipe(image()).pipe(gulp.dest(routes.img.dest));
const watch = () => {
gulp.watch(routes.pug.watch, pug);
gulp.watch(routes.img.src, img);
};
const prepare = gulp.series([clean, img]);
const assets = gulp.series([pug]);
const live = gulp.parallel([webserver, watch]);
export const dev = gulp.series([prepare, assets, live]);
scss 설정
import gulp from 'gulp';
import gpug from 'gulp-pug';
import del from 'del';
import ws from 'gulp-webserver';
import image from 'gulp-image';
import sass from 'gulp-sass';
import nsass from 'node-sass';
sass.compiler = nsass;
const routes = {
pug: {
watch: 'src/**/*.pug',
src: 'src/*.pug',
dest: 'build',
},
img: {
src: 'src/img/*',
dest: 'build/img',
},
scss: {
watch: 'src/scss/**/*.scss',
src: 'src/scss/style.scss',
dest: 'build/css',
},
};
const pug = () =>
gulp.src(routes.pug.src).pipe(gpug()).pipe(gulp.dest(routes.pug.dest));
const clean = () => del(['build/']);
const webserver = () =>
gulp.src('build').pipe(ws({ livereload: true, open: true }));
const img = () =>
gulp.src(routes.img.src).pipe(image()).pipe(gulp.dest(routes.img.dest));
const styles = () =>
gulp
.src(routes.scss.src)
.pipe(sass().on('error', sass.logError))
.pipe(gulp.dest(routes.scss.dest));
const watch = () => {
gulp.watch(routes.pug.watch, pug);
gulp.watch(routes.img.src, img);
gulp.watch(routes.scss.watch, styles);
};
const prepare = gulp.series([clean, img]);
const assets = gulp.series([pug, styles]);
const live = gulp.parallel([webserver, watch]);
export const dev = gulp.series([prepare, assets, live]);
autoprefixer(구형 브라우저에 적용시키기 위해)랑 minify 적용
import gulp from 'gulp';
import gpug from 'gulp-pug';
import del from 'del';
import ws from 'gulp-webserver';
import image from 'gulp-image';
import sass from 'gulp-sass';
import nsass from 'node-sass';
import autoprefixer from 'gulp-autoprefixer';
import miniCSS from 'gulp-csso';
sass.compiler = nsass;
const routes = {
pug: {
watch: 'src/**/*.pug',
src: 'src/*.pug',
dest: 'build',
},
img: {
src: 'src/img/*',
dest: 'build/img',
},
scss: {
watch: 'src/scss/**/*.scss',
src: 'src/scss/style.scss',
dest: 'build/css',
},
};
const pug = () =>
gulp.src(routes.pug.src).pipe(gpug()).pipe(gulp.dest(routes.pug.dest));
const clean = () => del(['build/']);
const webserver = () =>
gulp.src('build').pipe(ws({ livereload: true, open: true }));
const img = () =>
gulp.src(routes.img.src).pipe(image()).pipe(gulp.dest(routes.img.dest));
const styles = () =>
gulp
.src(routes.scss.src)
.pipe(sass().on('error', sass.logError))
.pipe(
autoprefixer({
browsers: ['last 2 versions'],
})
)
.pipe(miniCSS())
.pipe(gulp.dest(routes.scss.dest));
const watch = () => {
gulp.watch(routes.pug.watch, pug);
gulp.watch(routes.img.src, img);
gulp.watch(routes.scss.watch, styles);
};
const prepare = gulp.series([clean, img]);
const assets = gulp.series([pug, styles]);
const live = gulp.parallel([webserver, watch]);
export const dev = gulp.series([prepare, assets, live]);
babel support
import gulp from 'gulp';
import gpug from 'gulp-pug';
import del from 'del';
import ws from 'gulp-webserver';
import image from 'gulp-image';
import sass from 'gulp-sass';
import nsass from 'node-sass';
import autoprefixer from 'gulp-autoprefixer';
import miniCSS from 'gulp-csso';
import bro from 'gulp-bro';
import babelify from 'babelify';
sass.compiler = nsass;
const routes = {
pug: {
watch: 'src/**/*.pug',
src: 'src/*.pug',
dest: 'build',
},
img: {
src: 'src/img/*',
dest: 'build/img',
},
scss: {
watch: 'src/scss/**/*.scss',
src: 'src/scss/style.scss',
dest: 'build/css',
},
js: {
watch: 'src/js/**/*.js',
src: 'src/js/main.js',
dest: 'build/js',
},
};
const pug = () =>
gulp.src(routes.pug.src).pipe(gpug()).pipe(gulp.dest(routes.pug.dest));
const clean = () => del(['build/']);
const webserver = () =>
gulp.src('build').pipe(ws({ livereload: true, open: true }));
const img = () =>
gulp.src(routes.img.src).pipe(image()).pipe(gulp.dest(routes.img.dest));
const styles = () =>
gulp
.src(routes.scss.src)
.pipe(sass().on('error', sass.logError))
.pipe(autoprefixer())
.pipe(miniCSS())
.pipe(gulp.dest(routes.scss.dest));
const js = () =>
gulp
.src(routes.js.src)
.pipe(
bro({
transform: [
babelify.configure({ presets: ['@babel/preset-env'] }),
['uglifyify', { global: true }],
],
})
)
.pipe(gulp.dest(routes.js.dest));
const watch = () => {
gulp.watch(routes.pug.watch, pug);
gulp.watch(routes.img.src, img);
gulp.watch(routes.scss.watch, styles);
gulp.watch(routes.js.watch, js);
};
const prepare = gulp.series([clean, img]);
const assets = gulp.series([pug, styles, js]);
const live = gulp.parallel([webserver, watch]);
export const dev = gulp.series([prepare, assets, live]);
deploy gh-page
import gulp from 'gulp';
import gpug from 'gulp-pug';
import del from 'del';
import ws from 'gulp-webserver';
import image from 'gulp-image';
import sass from 'gulp-sass';
import autoprefixer from 'gulp-autoprefixer';
import miniCSS from 'gulp-csso';
import bro from 'gulp-bro';
import babelify from 'babelify';
import ghPages from 'gulp-gh-pages';
sass.compiler = require('node-sass');
const routes = {
pug: {
watch: 'src/**/*.pug',
src: 'src/*.pug',
dest: 'build',
},
img: {
src: 'src/img/*',
dest: 'build/img',
},
scss: {
watch: 'src/scss/**/*.scss',
src: 'src/scss/style.scss',
dest: 'build/css',
},
js: {
watch: 'src/js/**/*.js',
src: 'src/js/main.js',
dest: 'build/js',
},
};
const pug = () =>
gulp.src(routes.pug.src).pipe(gpug()).pipe(gulp.dest(routes.pug.dest));
const clean = () => del(['build/', '.publish']);
const webserver = () => gulp.src('build').pipe(ws({ livereload: true }));
const img = () =>
gulp.src(routes.img.src).pipe(image()).pipe(gulp.dest(routes.img.dest));
const styles = () =>
gulp
.src(routes.scss.src)
.pipe(sass().on('error', sass.logError))
.pipe(autoprefixer())
.pipe(miniCSS())
.pipe(gulp.dest(routes.scss.dest));
const js = () =>
gulp
.src(routes.js.src)
.pipe(
bro({
transform: [
babelify.configure({ presets: ['@babel/preset-env'] }),
['uglifyify', { global: true }],
],
})
)
.pipe(gulp.dest(routes.js.dest));
const gh = () => gulp.src('build/**/*').pipe(ghPages());
const watch = () => {
gulp.watch(routes.pug.watch, pug);
gulp.watch(routes.img.src, img);
gulp.watch(routes.scss.watch, styles);
gulp.watch(routes.js.watch, js);
};
const prepare = gulp.series([clean, img]);
const assets = gulp.series([pug, styles, js]);
const live = gulp.parallel([webserver, watch]);
export const build = gulp.series([prepare, assets]);
export const dev = gulp.series([build, live]);
export const deploy = gulp.series([build, gh, clean]);
Author And Source
이 문제에 관하여(gulp 정리), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@hrj0903/gulp-정리저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)