2016-10-30 135 views
1

有沒有辦法從我的吞嚥任務中運行包吞嚥任務?這是我的文件結構:在我的吞嚥任務中運行包的吞嚥任務

Root 
| 
|-- Gulpfile.js (task: get-files) 
| 
|-- node_modules 
    | 
    |-- packageA 
      | 
      |-- gulpfile.js (task: compile-custom) 

我想從我的get-files任務中在自己的gulpfile運行從packageAcompile-custom任務。理想情況下,我也可以從compile-custom任務中獲得回調,以瞭解它何時完成。

回答

1

我會建議不要根據需要從另一個gulpfile運行任務,特別是從node_modules包中運行。不想這樣做的原因是因爲軟件包可以更改/更新,然後因爲它而中斷代碼。

最好你應該只是將你想要的gulpfile任務複製到你的gulpfile並將它合併到你的項目中,或者只是創建一個新的文件,在這裏你可以很容易地區分它是與你的gulp文件分開的東西,在你自己的環境中,就像你使用其他軟件包和/或JS功能一樣。使用其中任何一個選項都不要忘記將依賴關係安裝到您的package.json文件中,然後運行npm install


注:要一飲而盡任務中運行一飲而盡任務中,你可以使用

gulp.start('taskname')

雖然下面應該只有在完全必要使用。另外將在新版本的Gulp v4(refer to this)中棄用。調用任務的方法是通過創建一個如上所述的函數並在您的gulp文件中調用該函數。吞函數調用的


例子:

var someFile = require('./someFile.js'); 

gulp.task('my-custom-task', function() { 
    someFile.doSomething('foo', 'bar'); 
}); 

如果你的函數做一些事情異步,它應該調用在最後一個回調,所以一飲而盡能夠知道什麼時候它的完成:

var someFile = require('./someFile.js'); 

gulp.task('my-custom-task', function (callback) { 
    someFile.doSomething('foo', 'bar', callback); 
}); 
+0

我可以理解這個問題。爲了簡單起見,我的目標是讓這個任務成爲單一的任務。我的計劃是運行'packageA',它將一個文件輸出到'packageA''' dist'目錄。從那裏,我抓住該文件並將其放在我的項目的'js'目錄中,因此需要同步調用。 –

+0

如果你想同步呼叫,並且你需要知道最後一個任務完成的時間,我建議你查看[Run-Sequence Module](https://www.npmjs.com/package/run-sequence)。你只需按照你想要的順序放置東西,然後它們將按順序運行,一旦你完成一個任務,你就可以進入下一個任務。你的情況似乎是你想要的。 – CriCri

+0

謝謝!我會試試這個解決方案的一些組合,然後回覆你。 –