2017-05-10 19 views
2

、かなりの量のような、そのようなものに落ちる:実行一気として対話プロンプト

  • ロード一気タスク;
  • ノードモジュールをインポートしています。

代わりに毎回gulp task_nameを実行するので我々はgulpfile.jsをロードし、私たちはその名前を入力して、ゴクゴクタスクを実行することができる場所プロンプトを開始します何かを実行する場合、これは、最適化することができます。これにより、グルップタスクのロードに1回だけ時間を費やすことができ、インポートされたノードモジュールはrequireでキャッシュされ、その後のタスク実行時にはるかに高速にロードされます。

これはどのように実装できますか?

これは自分の知識をコミュニティと共有する自己回答型の質問です。
その他の回答は大歓迎です。ベストアンサーが受け入れられます。

答えて

2

UPDATE:

私はNPMパッケージgulp-interactiveを発表しました。

だけでそれをインストールします。

npm install --save-dev gulp-interactive 

そしてgulpfile.jsでそれを使用します。

require('gulp-interactive')(); 

次にシェルで:

$ gulp prompt 

ORIGINAL ANSWER:

特別なグループタスク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を実行してプロンプトを起動することができます。

次のタスクを実行します。 この最適化を使用すると、Docker for Macコンテナ内でWebアプリケーションのビルド時間が50秒から15秒に短縮されました(ファイルシステムの動作が遅いと考えられます)。私のMacでビルドを直接実行すると、ビルド時間が13秒から6秒に短縮されました。

関連する問題