2017-05-19 71 views
2

在下面的代碼片段中,.pipe(gulpIf('*.css', cssnano()))的輸入和輸出是什麼?.pipe()函數在gulp中返回什麼?

gulp.task('useref', function(){ 
    return gulp.src('app/*.html') 
    .pipe(useref()) 
    .pipe(gulpIf('*.js', uglify())) 
    .pipe(gulpIf('*.css', cssnano())) 
    .pipe(gulp.dest('dist')) 
}); 

API文檔(link)說:.pipe(destination)返回設立連鎖到目的地流的引用,如果是這樣.pipe(gulpIf('*.js', uglify()))會返回一個流的縮小.js文件,怎能通過管道輸送到.pipe(gulpIf('*.css', cssnano()))

+0

流不是縮小的'.js'文件,它是正在處理的[乙烯基文件](https://github.com/gulpjs/vinyl-fs)的流 - 例如Gulp流,而不是文件流。 –

+0

據我所知,這是一個[vinyl](https://github.com/gulpjs/vinyl)文件系統流,而不僅僅是一個文件。 –

+2

@ÁlvaroGonzález好高,,多麼驚人的時機。問題在這裏已經持續14分鐘了,我們兩個人的評論幾乎相同,只是*一秒鐘*! :-) –

回答

1

Gulp只是一個具有相當簡單的基本功能的任務運行者。它的力量來源於廣泛的第三方軟件包生態系統,其中你自己的片段至少使用了四個。我說,因爲這是什麼顯示在你的gulpfile.js源代碼; gulp本身有13 direct runtime dependencies

"dependencies": { 
    "archy": "^1.0.0", 
    "chalk": "^1.0.0", 
    "deprecated": "^0.0.1", 
    "gulp-util": "^3.0.0", 
    "interpret": "^1.0.0", 
    "liftoff": "^2.1.0", 
    "minimist": "^1.1.0", 
    "orchestrator": "^0.3.0", 
    "pretty-hrtime": "^1.0.0", 
    "semver": "^4.1.0", 
    "tildify": "^1.0.0", 
    "v8flags": "^2.0.2", 
    "vinyl-fs": "^0.3.0" 
}, 

...和類似數量的直接開發依賴關係。

gulp傳遞的流由vinyl-fs提供,並不代表單個文件,而是虛擬文件系統。

隨着對你的代碼,你只明確以HTML文件開始:

gulp.src('app/*.html') 

...但之後,你執行一個第三方的包叫做gulp-useref

.pipe(useref()) 

按其文檔:

將解析HTML中的構建塊,替換它們和pa通過可以獲得那些 文件。構建模塊內部的資源將被連接,並且 也會在流中通過

換句話說,它解析HTML文件以識別/生成資產文件,並將它們添加到流中以供進一步處理。

+0

「將解析的HTML構建塊」〜這是什麼意思?這裏有什麼構建塊? –

+1

啊!你的意思是<! - build: - ><! - endbuild - >'這個構建塊,對吧? –

+0

@AlokMishra就是這樣。但是,正如我所說的那樣,這是特定第三方軟件包的特定功能。 –