2017-03-28 11 views
2

タイトルは多少曖昧に聞こえるかもしれませんが、 ModuleAModuleBModuleBに依存するように、私たちは三つのモジュールModuleAModuleB、およびModuleCがあるとしModuleCに依存します。 ModuleAに対してタスクを実行する必要があるときは、依存関係に対していくつかのタスクを実行する必要があることもよくあります。ModuleBModuleCここでは、gulpサブモジュールが動作します。 Gulpサブモジュールは、依存モジュールのタスクがその依存関係の適切なタスクをトリガーするように、依存モジュールのタスクとその依存関係の依存関係を定義します。gulp-submoduleを介して依存関係が注入され、gulp-submoduleを介して依存関係があるモジュールでgulpタスクを実行すると失敗します。

フラットな構造の場合、つまりSomeModuleは、独自の依存関係のない他のモジュールに依存します。しかし、それらの依存関係のいずれかがそれ自身の依存性を持つと、全体の生態系は、暴力団が特定の仕事を見つけることができないことを示すあいまいなエラーメッセージで壊れます。

ここにデモコードがあります。これをローカル環境でテストするには、少なくともgulpをグローバルパッケージとしてインストールし、gulpとgulp-submoduleの両方をプロジェクトのローカルパッケージとしてインストールする必要があります。

モジュールa.gulpfile.js

const gulp = require("gulp"); 
require("gulp-submodule")(gulp); 

gulp.submodule("module-b", {filepath: "module-b.gulpfile.js"}); 

gulp.task("default", ["module-b:default"],() => { 
    console.log("Running task 'default' for module 'module-a'..."); 
}); 

モジュールb.gulpfile.js

const gulp = require("gulp"); 
require("gulp-submodule")(gulp); 

gulp.submodule("module-c", {filepath: "module-c.gulpfile.js"}); 

gulp.task("default", ["module-c:default"],() => { 
    console.log("Running task 'default' for module 'module-b'..."); 
}); 

モジュールc.gulpfile.js

const gulp = require("gulp"); 

gulp.task("default", [],() => { 
    console.log("Running task 'default' for module 'module-c'..."); 
}); 

一気--gulpfileモジュール-a.gulpfile.js
[7時15分27秒:0あなたは、モジュールa.gulpfile.js上のタスクのデフォルト」を実行したら、このような出力を得ます] gulpfile module-a.gulpfile.jsを使用する
[07:15:27] 'module-b:module-c:default'というタスクがgulpfileにありません
[07:15:27]こうした名前を持つタスクがdefinされていないものの、1は気づくかもしれませんが、がぶ飲みは「デフォルト:モジュール-Cモジュール-B」と呼ばれる特定のタスクを探している

書式設定の適切gulpfileいずれかのプロジェクトファイルで編集または参照されます。

答えて

2

この奇妙な存在しないタスクは、gulp-submoduleがモジュールとタスク間の依存関係を処理する方法に由来します。簡単な言葉で、それは次のようん:

  1. まず、この呼び出しでgulp.submodule("module-b", {filepath: "module-b.gulpfile.js"})一気-サブモジュールは、一時的に元gulp.taskを置き換え、モジュールとして指定されたgulpfileをロードします。
  2. gulpfileがロードされると、gulpの変更されたインスタンスが取得されます。タスクのメソッドは、モジュール名とセパレータ(デフォルトでは ":")を前に付けて、引数として送信されたタスクの名前を変更します。
  3. その後、gulpがモジュール 'module-a'のタスク 'default'を実行すると、これは「module-b:default」という参照先の依存関係になります。依存関係の階層の複数のレベル、この単純なロジック休憩、とステップ2

の「モジュールの 『モジュール-B』 を包まれgulp.taskでモジュール-b.gulpfile.js結果からgulp.submodule("module-c", {filepath: "module-c.gulpfile.js"})を呼び出すので、 2回目にgulp-submoduleによってモジュール 'module-c'のタスク 'default'の名前が2回追加されます。最初は 'module-c'、次に 'module-b'です。

これを直ちに修正するために、元のサブモジュールのプライベートにショートカット修正を提出しました:5864ae5gulp-submodule)。これは単なる速い修正であり、間違いなく最高のものではありませんが、それは私のためのトリックでした。私はこの答えを更新します、私はこの問題に対してより強固な解決策を提供する必要があります。

関連する問題