gulp.run은 더 이상 사용되지 않습니다. 작업을 어떻게 작성합니까?


97

다음은 작업 종속성으로 대체하는 방법을 모르는 구성된 작업입니다.

...
gulp.task('watch', function () {
 var server = function(){
  gulp.run('jasmine');
  gulp.run('embed');
 };
 var client = function(){
  gulp.run('scripts');
  gulp.run('styles');
  gulp.run('copy');
  gulp.run('lint');
 };
 gulp.watch('app/*.js', server);
 gulp.watch('spec/nodejs/*.js', server);
 gulp.watch('app/backend/*.js', server);
 gulp.watch('src/admin/*.js', client);
 gulp.watch('src/admin/*.css', client);
 gulp.watch('src/geojson-index.json', function(){
  gulp.run('copygeojson');
 });
});

해당 변경 로그 https://github.com/gulpjs/gulp/blob/master/CHANGELOG.md#35 [gulp.run 사용 중단]

답변:


82
gulp.task('watch', function () {
  var server = ['jasmine', 'embed'];
  var client = ['scripts', 'styles', 'copy', 'lint'];
  gulp.watch('app/*.js', server);
  gulp.watch('spec/nodejs/*.js', server);
  gulp.watch('app/backend/*.js', server);
  gulp.watch('src/admin/*.js', client);
  gulp.watch('src/admin/*.css', client);
  gulp.watch('src/geojson-index.json', ['copygeojson']);
});

작업을 실행하기 위해 더 이상 함수를 전달할 필요가 없습니다. watch에 작업 이름 배열을 제공 할 수 있으며이 작업을 수행합니다.


13
시청을 시작하기 전에 몇 가지 작업을 실행하려면 어떻게해야합니까? 예를 들어보고 싶지만 scripts스크립트 파일이 변경 될 때까지 기다리지 않고 즉시이 작업을 강제 실행하는 것이 좋습니다.
Monsignor 2014 년

4
그리고 그 작업에 인수를 전달할 방법이 있습니까?
Dr. Ernie

7
@rachel Monsingor가 묻는 질문과 관련이 없습니다.
Mark Amery 2015

6
@Monsingor이를 위해 작업 목록을 실행하는 새 작업을 정의 할 수 있습니다. 예를 들어, 일반적으로 다음과 같은 기본 작업을 정의합니다.이 작업 gulp.task('default', ['build', 'watch']);은 먼저 빌드 한 다음 시청을 시작합니다.
Bastiaan van den Berg

1
@BastiaanvandenBerg gulp 작업이 병렬로 실행되도록 설계되었다고 생각 했습니까? 따라서 빌드를 먼저 나열하더라도 감시 작업이 실행되기 전에 완료 할 필요가 없습니다. 나는 그들이 시계가 시작되기 전에 빌드가 완료되었는지 확인하기를 원하는 OP에서 얻고 있습니다.
Sean Ryan

85

또는 다음과 같이 할 수 있습니다.

gulp.start('task1', 'task2');

3
사용하기에 안전한가요? API 문서 (링크)에 언급되지 않았습니다 .
Felix Rabe

4
.startOrchestrator 방법입니다. Gulp는 그것으로부터 물려 받았으므로 작동합니다. 나는 꿀꿀이 아닌 기능 (watchify)에서 꿀꺽 꿀꺽 작업을 트리거하고 있으며 이것이 작동하는 것처럼 보입니다.
joemaller 2014-06-22

24
gulp.start다음 릴리스에서 제거됩니다 : github.com/gulpjs/gulp/issues/505#issuecomment-45379280
yckart

13
@yckart 그래서 우리는 작업을 실행하기 위해 무엇을 사용합니까?
chovy

6
이를 수정하면 대부분의 용도는 npmjs.com/package/run-sequencegulp-start 로 대체 할 수 있습니다.run-sequence
joemaller 2015

25

출처 : https://github.com/gulpjs/gulp/issues/755

gulp.start()공개 API가 아니거나 사용되지 않았습니다. 위에서 언급했듯이 작업 관리는 다음 릴리스에서 대체됩니다 gulp.start().

꿀꺽 꿀꺽 디자인의 진정한 의도는 일반 자바 스크립트 함수를 만들고이를 호출하는 작업 만 만드는 것입니다.

예:

function getJsFiles() {
    var sourcePaths = [
        './app/scripts/**/*.js',
        '!./app/scripts/**/*.spec.js',
        '!./app/scripts/app.js'
    ];

    var sources = gulp.src(sourcePaths, { read: false }).pipe(angularFilesort());

    return gulp.src('./app/index.html')
        .pipe(injector(sources, { ignorePath: 'app', addRootSlash: false }))
        .pipe(gulp.dest('./app'));
}  

gulp.task('js', function () {
    jsStream = getJsFiles();
});

12

오래된 질문을 부활시킨 것을 용서하십시오. 허용되는 답변은 시계를 설정하기 전에 작업 실행 문제를 해결하지 않습니다. 다음 답변은 사라지는 gulp.start를 사용합니다. 세 번째 대답은 일반 함수를 사용해야하지만 예제는 이상하게 보입니다. 나는 약간의 검색을했지만 간단한 예를 찾지 못했습니다.

여기 내 해결책이 있습니다. 아이디어는 일반 js 함수를 정의한 다음 작업으로 등록하는 것입니다. 그런 다음 필요한 경우 직접 또는 시계 내에서 함수를 호출 할 수 있습니다.

var 
  gulp     = require('gulp'),
  concat   = require('gulp-concat'),
  markdown = require('gulp-showdown')
;
var scriptFiles   = [ 'ang/app.js' ];
var markdownFiles = [ 'content/articles/*.md'];

var watchTask = function() 
{
  buildTask();

  gulp.watch(scriptFiles,  ['scripts' ]);
  gulp.watch(markdownFiles,['markdown']);
};
gulp.task('watch',watchTask);

var buildTask = function()
{
  scriptsTask();
  markdownTask();
};
gulp.task('build',buildTask);

var markdownTask = function() 
{
  gulp.src(markdownFiles)
    .pipe(markdown())
    .pipe(gulp.dest('web/articles'));
};
gulp.task('markdown',markdownTask);

var scriptsTask = function() 
{
  gulp.src(scriptFiles)
    .pipe(concat('app.js'))
    .pipe(gulp.dest('web/js'));

  gulp.src(
    [
      'bower_components/angular/angular.min.js',
      'bower_components/angular-route/angular-route.min.js'
    ])
    .pipe(concat('vendor.js'))
    .pipe(gulp.dest('web/js'));

  gulp.src(
    [
      'bower_components/angular/angular.min.js.map',
      'bower_components/angular-route/angular-route.min.js.map'
    ])
    .pipe(gulp.dest('web/js'));
};
gulp.task('scripts', scriptsTask);

나는 꿀꺽 꿀꺽 마시기 처음입니다. 내가 명백한 것을 간과했다면 알려주십시오.


이것은 또한 "빌드"작업과 "재 구축"작업을 더 쉽게 만들 수있게하는데, 둘 다 작업을 수행하는 함수를 호출하지만 후자는 "정리"작업에도 의존합니다.
Seth

1
이것은 또한 JS가로 이동합니다 점에서, 정상 꿀꺽 작업과 같은 문제가 발생하지 않습니다 gulp.watch에 정의 된 작업 watchTask()전에 buildTask()완료 확인? 나는 이것이 여전히 경쟁 조건이라고 생각하고 시계 전에 빌드를 보장하지 않습니다.
Sean Ryan

7

꿀꺽 4

gulp.parallel('taskName1', 'taskName2')()
gulp.series('taskName1', 'taskName2')()

나는 gulp4를 좋아한다!


많은 검색 후 최고의 답변. 감사.
AminFarajzadeh

5

@dman이 언급했듯이 gulp.start다음 버전에서는 폐기됩니다. 또한 gulp의 이번 호 에서 볼 수 있습니다 .

그리고 @Pavel Evstigneev의 답변에 대한 의견에서 @joemaller는 이 시나리오에서 실행 시퀀스 를 사용할 수 있다고 언급합니다 .

그러나 run-sequence의 저자는 다음과 같이 말합니다.

이것은 직렬 또는 병렬로 작업 종속성을 정의하는 것을 지원하는 gulp 4.0이 릴리스 될 때까지 임시 솔루션으로 사용하기위한 것입니다.

이 솔루션은 해킹이며 향후 gulp 업데이트 작업을 중단 할 수 있습니다.

따라서 gulp 4.0 이전에는 run-sequence를 사용할 수 있고 4.0 이후에는 gulp를 사용할 수 있습니다.


3

실행중인 작업의 순서를 유지해야하는 경우 여기에 설명 된대로 종속성을 정의 할 수 있습니다 . 종속성에서 스트림을 반환하기 만하면됩니다.

gulp.task('dependency', function () {
  return gulp.src('glob')
    .pipe(plumber())
    .pipe(otherPlugin())
    .pipe(gulp.dest('destination'));
});

종속 된 작업을 정의합니다.

gulp.task('depends', [ 'dependency' ], function () {
  // do work
});

시계에서 사용 :

gulp.task('watch', function () {
  watch('glob', [ 'depends' ]);
});

이제 dependecy작업이 depends실행 되기 전에 완료 됩니다 (예를 들어 'jasmine'및 'embed'작업은 종속성이되고 이에 종속되는 다른 작업 '서버'가 있습니다). 해킹이 필요 없습니다.


이 오프 주제 아니라면 그것은 단지 별도의 질문을해야한다 의견의 질문에 대답 때문에, 잘 모르겠어요
Killah

2

Gulp 4에서 나를 위해 일하는 유일한 것은 다음과 같습니다.

gulp.task('watch', function() {
    gulp.watch(['my-files/**/*'], gulp.series('my-func'));
});

gulp.task('my-func', function() {
    return gulp.src('[...]').pipe(gulp.dest('...'));
});

1

감시를 시작하기 전에 작업을 실행하려면 gulp.run () 또는 gulp.start ()를 사용하는 대신 gulp 명령을 바로 실행하십시오.

그래서 대신 :

var compress = function () {
    return gulp.src('js/vendor/*.js')
        .pipe(concat('vendor.js'))
        .pipe(gulp.dest('./build/js/'));
};

그냥 해:

gulp.src('js/vendor/*.js')
        .pipe(concat('vendor.js'))
        .pipe(gulp.dest('./build/js/'));

또는 후자의 코드를 "일반"함수로 래핑하고 원할 때마다 호출 할 수 있습니다.

- 유사한 스레드에서이 답변에서 영감을 얻었습니다 .


0

나는 이것이 실제로 당면한 질문을 어떻게 해결하는지 아직 보지 못한다.

종속성이 정의 된 4 개의 작업이있는 경우

A, B, C, D

여기서 A는에서 정의한대로 B 등에 gulp.task('A',['B'],function A(){});의존하고 함수 만 실행하는 gulp.watch를 사용하여 새 작업을 정의하면 종속성이 복제됩니다.

예를 들어 다음과 같은 작업이 주어집니다 (각 작업 기능은 이름을 통해 노출됨).

function A(){}
gulp.task('A',['B'],A);

function A(){}
gulp.task('A',['B'],A);

function B(){}
gulp.task('B',['C'],B);

function C(){}
gulp.task('C',['D'],C);

function D(){}
gulp.task('D',[],D);

나는 쓸 수있다 1)

gulp.task('WATCHER', ['A'], function(){
   ...
}

A-> D를 실행하지만 예를 들어 단계 B가 실패하면 작업에 들어 가지 않습니다 (컴파일 또는 테스트 오류를 ​​생각해보십시오).

또는 2)

gulp.task('WATCHER', [], function(){
   gulp.watch(...,['A'])
}

어떤 것이 먼저 변경 될 때까지 A-> D를 실행하지 않습니다.

또는 3)

gulp.task('WATCHER', [], function(){
   D();
   C();
   B();
   A();
   gulp.watch(...,['A'])
}

이는 종속성 계층 구조의 중복 (및 시간 경과에 따른 오류)을 유발합니다.

추신 : 누군가가 내가 라이브 개발을 위해 시계를 사용하기 때문에 종속 작업이 실패하면 왜 내 시계 작업을 실행 해야하는지 궁금해하는 경우. 예. 나는 테스트 작업을 시작하기 위해 시계 작업을 시작하고 시작하는 초기 코드에 이미 문제가 있으므로 오류가 발생할 수 있습니다.

그래서 나는 꿀꺽 꿀꺽 마시거나 그와 동등한 것이 얼마 동안 머물기를 바랍니다.


이 반박이 겨냥한 기존 답변은 무엇입니까?
Mogsdad
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.