2017-10-23 5 views
1

ユーザーが提供するタスクがgulpfileに存在しない場合、特定のタスクを実行する方法はありますか。ユーザーが必要とするタスクがgulpfileに存在しない場合に特定のタスクを実行

たとえば、ユーザがgulp buildを実行し、buildタスクがgulpfileに存在しない場合、特定のタスク(またはデフォルトタスクは問題ありません)を実行する必要があります。

類義語として、404ページgulpとして指定されたタスクを考えてみましょう。

+0

あなたは 'gulp build || 'build'が失敗した場合、または' build'が存在しない場合は 'gulp'が' default'を呼び出します。 –

+0

@PatrickRoberts私はこれらのタスクを実行するつもりはなく、他の開発者もそうです。タスクがないときに何をすべきかについての有意義なメッセージを表示したいと思います。 – noob

答えて

1

gulpは、tasksインスタンス変数を持ちます。インスタンス変数は、インスタンスに追加されたタスクの名前であるキーを持つプレーンオブジェクトです。あなたはproxytasksを交換した場合、あなたはそれがgetトラップハンドラを使用することによりdefaultのように、デフォルトのタスクを返すかもしれない:

const gulp = require('gulp') 

gulp.tasks = new Proxy(gulp.tasks, { 
    get (target, property) { 
    if (target.hasOwnProperty(property)) { 
     return target[property] 
    } 

    return target.default 
    } 
}) 

タスクのシーケンスが開始される前にコードをした後でも、いつでも実行できること一部のタスクはすでにgulpインスタンスに追加されています。

+1

ありがとう!それはまさに私が探していたものです。 – noob

0

パトリックの答えは本当に役に立ちました。 ESLintの警告と次のエラーが発生してから少し修正しなければなりませんでした。 -

TypeError: this.tasks.hasOwnProperty is not a function 

私は変更を投稿することも考えました。ここに私の最終的なコードは -

+0

'undefined!== target [property]'の注文のために['yoda'エラー](https://eslint.org/docs/rules/yoda)が表示されないのに驚いています –

+0

私はこの方法を使用しています私は間違って変数に未定義を割り当てることはありません。私は定義されていないチェックはyoda ;-)から保護されていると思う – noob

関連する問題