![](/img/trans.png)
[英]Gulp / Vinyl-fs - dest same directory as src not working with gulp-rename
[英]vinyl-fs (gulp file stream) not finishing .dest write before firing callback or promise
令人沮喪地嘗試在啟動將目標文件夾的副本上載到S3存儲桶的代碼之前,先獲取Vinyl-fs(gulpfs)流以完成所有.dest文件的寫入。 該復制操作會丟失流尚未寫入的目錄。
問題是vinly-fs如何處理回調/承諾(是嗎?)。
我已經整理了一些測試代碼進行實驗,但是當運行該代碼時,即使在.dest命令后強制流在啟動promise解析之前等待5秒鍾之后,promise也會立即被解析(在寫入開始之后?)。 我的解決功能當前會觸發,然后在5秒鍾后返回提示。 完全陷於此。 我不想沒有Vinyl-fs,但無論如何嘗試它似乎都無法正常播放,我需要按順序進行操作(在上傳文件之前將所有文件寫出)。
下面是我的測試代碼。 我進行了設置,因此您可以輕松地將代碼轉儲到文件中,設置一些源目錄並自己嘗試。 我查看了gulpjs問題以及關於stackoverflow的問題,其他一些問題也存在相同的問題,但是我沒有確定的答案/解決方案。
test.js
var source = './builds/**/*.*';
var p = foo(source);
p.then( bar, oopsBar );
//
// vinyl-fs based module task
//
function foo(src) {
var fs = require('vinyl-fs');
var wait = require('gulp-wait')
done = new Promise( function(resolve,reject){
fs.src(src)
.pipe(fs.dest('./temp'))
.pipe(wait(5000))
.on('finish',resolve());
});
// return a promise
return done;
}
function bar() {
console.log('Now uploading to S3 bucket');
}
function oopsBar() {
console.log('Something went wrong');
}
順便說一句,您可能想知道為什么我不使用gulp.task並返回promise並將我的上載作為單獨的gulp任務執行。 我目前將gulp.tasks最小化為cli啟動的任務。 最終,像運行此代碼一樣,只需使用哇“節點測試”代替,並一起刪除全局gulp依賴項和gulpfile.js。 Vinyl-fs是一個很棒的模塊!但是我決定最好不要購買Gulp / Grunt / Brunch / Jake的東西。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.