Gulp.js
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
Gulp.js는 Node.js 기반의 작업 실행기(task runner)로, 반복적인 프론트엔드 개발 작업을 자동화하여 개발 생산성을 높이는 데 사용된다. Grunt와 유사하게, Gulp는 I/O 호출 횟수를 줄여 빠른 빌드 속도를 제공하며, 코드를 사용하여 작업을 정의하여 유연성과 확장성을 제공한다. Gulpfile.js 파일에서 플러그인 로드, 태스크 정의, 기본 태스크 정의를 통해 Gulp의 동작을 정의한다. Gulp는 명령줄 인터페이스를 통해 실행되며, 다양한 플러그인을 활용하여 이미지 최적화, 자바스크립트 파일 압축, 파일 변경 감지 등의 작업을 수행할 수 있다.
더 읽어볼만한 페이지
- 자바스크립트 프로그래밍 도구 - 파이어버그 (소프트웨어)
2005년 조 휴이트가 개발한 파이어버그는 웹 개발 생산성 향상에 기여한 파이어폭스 확장 기능 기반의 오픈 소스 웹 개발 도구였으나, 파이어폭스 개발자 도구에 기능이 통합되며 더 이상 사용이 불가능해졌다. - 자바스크립트 프로그래밍 도구 - 그런트
그런트는 자바스크립트 기반의 작업 실행 도구로, package.json과 Gruntfile을 통해 프로젝트를 구성하고 다양한 플러그인을 활용하여 작업 확장이 용이한 프로젝트 자동화 도구이다. - 공식 웹사이트에 알 수 없는 변수를 사용한 문서 - 브루클린 미술관
브루클린 미술관은 1823년 브루클린 견습생 도서관으로 시작하여 현재 약 50만 점의 소장품을 보유한 뉴욕 브루클린 소재의 미술관으로, 다양한 분야의 예술 작품을 전시하며 특히 아프리카 미술과 여성주의 미술에 대한 기여가 크다. - 공식 웹사이트에 알 수 없는 변수를 사용한 문서 - 광주지방기상청
광주지방기상청은 광주광역시와 전라남도 지역의 기상 예보, 특보, 관측, 기후 정보 제공 등의 업무를 수행하는 기상청 소속 기관으로, 1949년 광주측후소로 설치되어 1992년 광주지방기상청으로 개편되었으며, 기획운영과, 예보과, 관측과, 기후서비스과와 전주기상지청, 목포기상대를 두고 있다.
Gulp.js - [IT 관련 정보]에 관한 문서 | |
---|---|
개요 | |
![]() | |
종류 | 툴킷 |
라이선스 | MIT 허가서 |
개발 | |
개발자 | 블레인 버블리츠, 에릭 쇼프스톨 |
최초 개발자 | 에릭 쇼프스톨 |
출시 | |
최초 출시일 | 2013년 9월 26일 |
최신 안정화 버전 | 5.0.0 |
최신 안정화 버전 출시일 | 2024년 3월 29일 |
기술 정보 | |
프로그래밍 언어 | 자바스크립트 |
플랫폼 | Node.js |
저장소 | GitHub |
기타 | |
웹사이트 | 웹사이트 |
2. Gulp의 필요성
Node.js 기반 작업 실행기인 Gulp와 Grunt는 여러 작업을 실행할 때 기본적인 npm 스크립트가 비효율적이기 때문에 npm이 아닌 Node.js를 기반으로 구축되었다.[1]
`gulpfile`은 Gulp에서 모든 작업이 정의되는 곳으로, 프로젝트의 루트 디렉토리에 위치한다. `gulpfile`은 맨 위에 필요한 플러그인을 포함하고, 끝부분에는 태스크 정의와 기본 태스크가 위치한다.[28]
Gulp는 node 스트림을 기반으로 작동하는 자바스크립트 빌드 도구이다.[8] 스트림은 파이프라인을 통해 파일 작업을 연결한다.[9] Gulp는 파일 시스템을 읽고, `.pipe()` 연산자를 통해 데이터를 단일 목적 플러그인에서 다른 플러그인으로 전달하여 한 번에 하나의 작업을 수행한다. 모든 플러그인이 처리될 때까지 원본 파일은 영향을 받지 않으며, 필요에 따라 원본 파일을 수정하거나 새 파일을 생성하도록 구성할 수 있다. 이를 통해 여러 플러그인을 연결하여 복잡한 작업을 수행할 수 있다.[10]
다음은 일반적인 Gulp 태스크의 예시이다.
일부 개발자들은 npm 스크립트가 간단하고 구현하기 쉽기 때문에 선호하지만, Gulp와 Grunt는 서로 간에, 그리고 기본 제공 스크립트에 비해 유리한 점이 많다.[11] Grunt는 파일을 변환하여 작업을 실행하고 이를 임시 폴더에 새 파일로 저장하며, 한 작업의 출력을 다른 작업의 입력으로 사용하여 출력 결과가 대상 폴더에 도달할 때까지 계속한다. 이 과정에서 많은 I/O 호출과 많은 임시 파일이 생성된다. 반면 Gulp는 파일 시스템을 통해 스트리밍하므로 이러한 임시 위치가 필요하지 않아 I/O 호출 횟수를 줄여 성능을 향상시킨다.[12] Grunt는 구성 파일을 사용하여 작업을 수행하는 반면, Gulp는 빌드 파일을 코딩해야 한다. Grunt에서는 각 플러그인이 이전 플러그인의 출력에 해당하도록 입력 위치를 구성해야 하지만, Gulp에서는 플러그인이 자동으로 파이프라인화된다.[9]
3. Gulpfile의 구조
Gulp 작업은 명령줄 인터페이스(CLI)[11] 셸에서 실행된다. Gulp를 사용하기 위해서는 `package.json` 파일과 `gulpfile.js` (또는 `gulpfile`) 파일이 필요하다. `package.json` 파일은 Gulp에 필요한 다양한 플러그인들을 나열하는데 사용된다. 빌드 도구의 관례에 따라, 이 파일들은 패키지 소스 코드의 루트 디렉토리에 위치한다. `gulpfile`은 Gulp가 빌드 작업을 실행하는 데 필요한 대부분의 로직을 포함한다. `gulpfile`에서는 먼저 필요한 모든 모듈을 로드한 다음, 작업을 정의한다. `gulpfile`에 지정된 모든 필수 플러그인은 `package.json`의 devDependencies 섹션에 나열된다.[13] 기본 작업은 `$gulp` 명령어로 실행되며, 개별 작업은 `gulp
3. 1. 플러그인
Gulp는 node 스트림을 기반으로 구축된 자바스크립트 빌드 도구이다. 이러한 스트림은 파이프라인을 통해 파일 작업 연결을 용이하게 한다.[9] gulp는 파일 시스템을 읽고, `.pipe()` 연산자를 통해 데이터를 단일 목적 플러그인에서 다른 플러그인으로 파이프하여 한 번에 하나의 작업을 수행한다. 모든 플러그인이 처리될 때까지 원본 파일은 영향을 받지 않으며, 원본 파일을 수정하거나 새 파일을 생성하도록 구성할 수 있다. 이를 통해 수많은 플러그인을 연결하여 복잡한 작업을 수행할 수 있다. 또한, 사용자도 자체 플러그인을 작성하여 고유한 작업을 정의할 수 있다.[10] gulp는 빌드 시스템으로 작업을 실행하는 것 외에도 파일을 한 위치에서 다른 위치로 복사하고, 컴파일, 배포, 알림 생성, 단위 테스트, 린팅 등을 수행할 수 있다.[1]
작업 수행에 필요한 설치된 모든 플러그인은 gulpfile의 상단에 다음과 같은 형식의 종속성으로 추가된다.[14][18]
```javascript
// 종속성 추가
var gulp = require ('gulp');
var gutil = require ('util-gulp');
3. 2. 태스크
Gulp 태스크는 `gulp.task()`를 사용하여 정의한다. 각 태스크는 특정 작업을 수행하는 함수를 포함한다. `gulp.task()`의 첫 번째 인자는 태스크 이름이고, 두 번째 인자는 실행할 함수 또는 함수 배열이다.[16]
다음은 Gulp 태스크를 생성하는 방법을 보여주는 예시이다.
gulp.task('taskName', function () {
//do something
});
`taskName`은 필수이며 셸에서 작업을 실행할 수 있는 이름을 지정한다.[16]
또는, 여러 개의 미리 정의된 기능을 수행하는 태스크를 생성할 수도 있다. 이러한 기능은 배열 형태로 두 번째 매개변수로 전달된다. `gulp.parallel()`은 함수들을 병렬로 실행한다.[16]
function fn1 () {
// do something
}
function fn2 () {
// do something
}
// Task with array of function names
gulp.task('taskName', gulp.parallel(fn1, fn2));
3. 3. 기본 태스크
Gulp의 기본 태스크는 `gulp` 명령어를 실행했을 때 실행되는 태스크이다. `gulp.task('default', ...)` 형태로 정의한다.[14] 기본 태스크는 다른 태스크들을 순차적으로 실행하거나, 파일 변경을 감지(watch)하는 등의 작업을 수행할 수 있다.[15]
기본 작업은 gulpfile의 끝부분에 정의되며, 명령줄 인터페이스(CLI) 셸에서 `gulp` 명령을 사용하여 실행할 수 있다.[18] 다음은 기본 작업의 예시이다.
```javascript
// Gulp 기본 작업
gulp.task('default', fn);
```
위 예시에서 `fn`은 실행할 함수를 나타낸다.
Gulp는 기본 태스크를 통해 위에 정의된 여러 하위 태스크들을 순차적으로 자동 실행할 수 있다. 또한 소스 파일을 감시하고 있다가 파일이 변경될 때 적절한 작업을 실행하도록 설정할 수 있다.[15]
4. Gulp 작동 방식
Gulp 작업은 명령줄 인터페이스(CLI) 셸에서 실행된다.[11] Gulp를 사용하려면 `package.json` 파일과 `gulpfile.js` (또는 `gulpfile`) 파일 두 개가 필요하다. 이 파일들은 보통 패키지 소스 코드의 루트 디렉토리에 있다. Gulpfile은 Gulp가 빌드 작업을 실행하는 데 필요한 대부분의 로직을 포함하며, 필요한 모든 모듈을 로드한 다음 gulpfile에서 작업을 정의한다. Gulpfile에 지정된 모든 필수 플러그인은 `package.json`의 devDependencies 섹션에 나열된다.[13] 기본 작업은 `$gulp` 명령어로 실행된다. 개별 작업은 gulp.task로 정의되며 `gulp
gulpfile은 gulp에서 모든 작업이 정의되는 곳이다. gulpfile의 기본 구조는 상단에 포함된 필수 플러그인, 작업 정의, 그리고 마지막에 있는 기본 작업으로 구성된다.[15]
5. 예제 태스크
```javascript
// 스크립트 작업
gulp.task('scripts', function () {
return gulp.src('scripts/*.js')
.pipe(uglify())
.pipe(gulp.dest('scripts/'));
});
```
위 코드는 '''scripts/''' 디렉터리의 모든 자바스크립트 파일을 `uglify()`로 최적화하고 `gulp.dest('scripts/')`를 통해 원본 파일을 덮어쓴다.
```javascript
// 파일이 변경될 때 태스크 다시 실행
gulp.task('watch', function (cb) {
gulp.watch('scripts/js/**', scripts);
gulp.watch('images/**', images);
cb();
});
```
`watch` 태스크는 파일 변경에 반응한다. 위 예시는 JavaScript 파일이나 이미지 파일이 지정된 디렉터리에서 변경될 때 'scripts'와 'images' 태스크를 호출한다.
5. 1. 이미지 최적화
javascript
var imagemin = require('gulp-imagemin');
```
를 사용하여 `imagemin` 모듈을 정의한다.
이미지 작업은 `gulp.src()`를 사용하여 '''images-orig/''' 디렉토리 내에서 .png, .gif 또는 .jpg 확장자를 가진 모든 이미지를 가져온다.
`pipe(imagemin())`은 찾아낸 이미지를 최적화 과정을 거치도록 연결하고, `.pipe(gulp.dest())`를 통해 최적화된 이미지를 '''images/''' 폴더에 저장한다. `gulp.dest()`가 없으면 이미지는 실제로 최적화되지만 저장되지는 않는다.[17] 최적화된 이미지가 다른 폴더에 저장되므로 원본 이미지는 변경되지 않은 상태로 유지된다.[18]
```javascript
// 이미지 작업
gulp.task('images', function () {
return gulp.src('images/*.{png,gif,jpg}')
.pipe(imagemin())
.pipe(gulp.dest('dist/images/'));
});
5. 2. JavaScript 파일 압축
다음 예제에서는 '''scripts/''' 디렉터리의 모든 자바스크립트 파일이 `.pipe(uglify())`로 최적화되고 `gulp.dest('scripts/')`가 원본 파일을 출력으로 덮어쓴다.[19] 이를 위해 먼저 ''npm'' 패키지 설치 프로그램에서 필요한 ''gulp-uglify 플러그인''[20]을 반환하고 ''gulpfile''의 시작 부분에서 모듈을 정의해야 한다.
5. 3. 파일 변경 감지 (Watch)
`gulp.watch()` 함수는 파일 변경을 감지하고, 변경이 발생하면 지정된 태스크를 실행한다.[21] 다음은 JavaScript 파일이나 이미지 파일이 지정된 디렉터리에서 변경될 때 'scripts'와 'images' 태스크를 호출하는 예시이다.
```javascript
gulp.watch('scripts/js/**', scripts);
gulp.watch('images/**', images);
```
`gulp.series()`를 사용하여 태스크를 순차적으로 실행할 수도 있다.
Watch 태스크를 활용하여 브라우저 자동 새로고침(Live Reload) 기능을 구현할 수 있다.[22]
6. Gulp와 Grunt 비교
작업 실행기인 gulp와 Grunt는 여러 작업을 실행할 때 기본적인 npm 스크립트가 비효율적이기 때문에 npm이 아닌 Node.js를 기반으로 구축되었다.[11] 일부 개발자는 npm 스크립트가 간단하고 구현하기 쉽기 때문에 선호하지만, gulp와 Grunt는 서로 간에, 그리고 기본 제공 스크립트에 비해 유리한 점이 많다.[11]
Grunt는 파일을 변환하여 작업을 실행하고 이를 임시 폴더에 새 파일로 저장하며, 한 작업의 출력을 다른 작업의 입력으로 사용하여 출력 결과가 대상 폴더에 도달할 때까지 계속한다. 이 과정에서 많은 I/O 호출과 많은 임시 파일이 생성된다. 반면 gulp는 파일 시스템을 통해 스트리밍하므로 이러한 임시 위치가 필요하지 않아 I/O 호출 횟수를 줄여 성능을 향상시킨다.[12]
Grunt는 구성 파일을 사용하여 작업을 수행하는 반면, gulp는 빌드 파일을 코딩해야 한다. Grunt에서는 각 플러그인이 이전 플러그인의 출력에 해당하도록 입력 위치를 구성해야 한다. gulp에서는 플러그인이 자동으로 파이프라인화된다.[9]
참조
[1]
서적
Developing a Gulp Edge
Bleeding Edge Press
[2]
웹사이트
Release Date of Version 1.0.0
https://libraries.io[...]
2020-12-31
[3]
웹사이트
Releases · gulpjs/gulp
https://github.com/g[...]
2020-12-31
[4]
웹사이트
LICENSE file on GitHub
https://github.com/g[...]
2020-12-31
[5]
웹사이트
License field from gulp - npm
https://www.npmjs.co[...]
2020-12-31
[6]
웹사이트
Building With Gulp – Smashing Magazine
https://www.smashing[...]
2016-12-14
[7]
웹사이트
gulp.js plugin registry
https://gulpjs.com/p[...]
2016-12-14
[8]
웹사이트
gulpjs/gulp
https://github.com/g[...]
2016-09-22
[9]
웹사이트
substack/stream-handbook: how to write node programs with streams
https://github.com/s[...]
GitHub
2016-12-14
[10]
웹사이트
gulpjs/gulp
https://github.com/g[...]
2016-09-22
[11]
웹사이트
gulpjs/gulp
https://github.com/g[...]
2016-09-23
[12]
웹사이트
Gulp for Beginners
https://css-tricks.c[...]
CSS-Tricks
2016-12-14
[13]
웹사이트
install {{!}} npm Documentation
https://docs.npmjs.c[...]
2016-09-22
[14]
웹사이트
gulpjs/gulp
https://github.com/g[...]
2016-09-23
[15]
웹사이트
An Introduction to Gulp.js - SitePoint
https://www.sitepoin[...]
2016-09-23
[16]
웹사이트
gulp/API.md at 4.0 · gulpjs/gulp · GitHub
https://github.com/g[...]
GitHub
2016-12-14
[17]
웹사이트
Durchstarten mit Gulp.js – Websites optimieren, Arbeitsabläufe automatisieren
http://magazin.phlow[...]
2016-12-14
[18]
서적
Getting Started with Gulp
Packt Publishing Ltd
[19]
웹사이트
Front-end Workflow mit Gulp - Liechtenecker
https://liechtenecke[...]
2016-12-14
[20]
웹사이트
gulp-uglify
https://www.npmjs.co[...]
2016-12-14
[21]
웹사이트
gulp-watch
https://www.npmjs.co[...]
2016-09-23
[22]
웹사이트
Browsersync + Gulp.js
https://www.browsers[...]
2016-12-14
[23]
웹인용
Releases · gulpjs/gulp
https://github.com/g[...]
2020-12-31
[24]
웹인용
License to github.com
https://github.com/g[...]
2016-05-30
[25]
서적
Developing a Gulp Edge
Bleeding Edge Press
[26]
웹인용
Building With Gulp – Smashing Magazine
https://www.smashing[...]
2016-12-14
[27]
웹인용
gulp.js plugin registry
https://gulpjs.com/p[...]
2016-12-14
[28]
웹인용
An Introduction to Gulp.js - SitePoint
https://www.sitepoin[...]
2016-09-23
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com