2017-05-10 7 views
2

상당한 양의 같은 그런 일에 해당 될실행 꿀꺽 같은 대화 형 프롬프트

  • 로딩 꿀꺽 작업;
  • 노드 모듈을 가져 오는 중입니다.

이는 경우 대신 우리가 gulpfile.js을로드하고 우리가 그 이름을 입력하여 꿀꺽 작업을 실행할 수있는 프롬프트를 시작합니다 뭔가를 실행할 때마다 gulp task_name을 실행하는 최적화 할 수 있습니다. 이렇게하면 꿀꺽 거리는 작업을 한 번만로드 할 수 있으며 가져온 노드 모듈은 require으로 캐싱되고 후속 작업 실행시 훨씬 빠르게로드됩니다.

어떻게 구현할 수 있습니까?

이것은 내 지식을 커뮤니티와 공유하는 자체 답변 질문입니다.
다른 답변을 환영합니다. 최선의 답변이 받아 들여집니다.

답변

2

UPDATE :

나는 NPM 패키지 gulp-interactive을 발표했다. gulpfile.js에서 그것을

npm install --save-dev gulp-interactive 

를 사용 :

단지에 설치

require('gulp-interactive')(); 

을 다음 쉘 :

$ gulp prompt 

ORIGINAL 답변 :

특별 한 덤프 작업 prompt을 구현했습니다. 먼저 inquirer 설치 :

npm install --save-dev inquirer 

그것은 우리가 작업 이름을 입력 개발자에게 문의 할 수있는 유용한 패키지입니다.

다음 작업을 구현합니다

gulp.task('prompt', function (cb) { 
    var promptedTask; 

    function startPrompt() { 
     promptedTask = undefined; 
     gulp.start('prompt'); 
    } 

    function onTaskEnd(event) { 
     setTimeout(function() { 
      if (event && promptedTask && event.task === promptedTask) { 
       gulp.removeListener('task_stop', onTaskEnd); 
       gulp.removeListener('task_err', onTaskEnd); 
       gulp.removeListener('task_not_found', onTaskEnd); 
       startPrompt(); 
      } 
     }); 
    } 

    gulp.on('task_stop', onTaskEnd); 
    gulp.on('task_err', onTaskEnd); 
    // replace gulp default listener for 'task_not_found' because it calls process.exit(1) 
    gulp.removeAllListeners('task_not_found'); 
    gulp.on('task_not_found', function (err) { 
     console.log('Task \'' + err.task + '\' is not in your gulpfile'); 
     onTaskEnd(err); 
    }); 

    var inquirer = require('inquirer'); 
    inquirer.prompt([{ type: 'input', name: 'task', 'message': 'Enter gulp task name:' }]) 
     .then(function (answers) { 
      promptedTask = answers.task || 'prompt'; 
      cb(); 
      gulp.start(promptedTask); 
     }); 
}); 

지금 당신이 gulp prompt을 실행하여 프롬프트를 시작할 수 있습니다. 이 최적화를 사용하면 Mac 용 Docker 컨테이너에서 웹 응용 프로그램의 빌드 시간이 50 초에서 15 초로 단축되었습니다 (파일 시스템 작업이 느린 것으로 판단 됨). 내 Mac에서 직접 빌드를 실행하면 빌드 시간이 13 초에서 6 초로 단축되었습니다.