ファイル操作#

src()dest() メソッドは、コンピュータ上のファイルとやり取りするために gulp によって公開されています。

src() は、ファイルシステムから読み込むための グロブ を受け取り、Nodeストリームを生成します。これは、一致するすべてのファイルを検索し、ストリームを通過させるためにメモリに読み込みます。

src() によって生成されたストリームは、「タスクの作成」で説明したように、非同期完了を通知するためにタスクから返される必要があります。

const { src, dest } = require('gulp');
exports.default = function() {
return src('src/*.js')
.pipe(dest('output/'));
}

ストリームの主なAPIは、TransformまたはWritableストリームを連鎖させるための.pipe()メソッドです。

const { src, dest } = require('gulp');
const babel = require('gulp-babel');
exports.default = function() {
return src('src/*.js')
.pipe(babel())
.pipe(dest('output/'));
}

dest() は、出力ディレクトリの文字列を受け取り、ターミネータストリームとして一般的に使用される Nodeストリーム も生成します。パイプラインを通過するファイルを受け取ると、その内容とその他の詳細を、指定されたディレクトリのファイルシステムに書き込みます。symlink() メソッドも利用可能で、dest() と同様に動作しますが、ファイルの代わりにリンクを作成します(詳細については、symlink() を参照してください)。

ほとんどの場合、プラグインは .pipe() メソッドを使用して src()dest() の間に配置され、ストリーム内のファイルを変換します。

ストリームにファイルを追加する#

src() は、指定されたグロブに基づいてストリームにファイルを追加するために、パイプラインの途中に配置することもできます。追加されたファイルは、ストリームの後続の変換でのみ利用可能になります。グロブが重複している場合、ファイルは再度追加されます。

これは、プレーンなJavaScriptファイルをパイプラインに追加してすべてを圧縮する前に、いくつかのファイルをトランスパイルするのに役立ちます。

const { src, dest } = require('gulp');
const babel = require('gulp-babel');
const uglify = require('gulp-uglify');
exports.default = function() {
return src('src/*.js')
.pipe(babel())
.pipe(src('vendor/*.js'))
.pipe(uglify())
.pipe(dest('output/'));
}

段階的な出力#

dest() は、中間状態をファイルシステムに書き出すために、パイプラインの途中で使用できます。ファイルを受信すると、現在の状態がファイルシステムに書き出され、出力ファイルの新しい場所を表すようにパスが更新され、そのファイルはパイプラインをさらに進みます。

この機能は、同じパイプラインで、圧縮されていないファイルと圧縮されたファイルを作成するのに役立ちます。

const { src, dest } = require('gulp');
const babel = require('gulp-babel');
const uglify = require('gulp-uglify');
const rename = require('gulp-rename');
exports.default = function() {
return src('src/*.js')
.pipe(babel())
.pipe(src('vendor/*.js'))
.pipe(dest('output/'))
.pipe(uglify())
.pipe(rename({ extname: '.min.js' }))
.pipe(dest('output/'));
}

モード: ストリーミング、バッファリング、空#

src() は、バッファリング、ストリーミング、空の3つのモードで動作できます。これらは、src()buffer および read オプションで設定します。

  • バッファリングモードはデフォルトで、ファイルの内容をメモリにロードします。プラグインは通常バッファリングモードで動作し、多くのプラグインはストリーミングモードをサポートしていません。
  • ストリーミングモードは、巨大な画像や動画など、メモリに収まらない大きなファイルを操作するために主に存在します。コンテンツは、すべてを一度にロードするのではなく、小さなチャンクでファイルシステムからストリーミングされます。ストリーミングモードを使用する必要がある場合は、それをサポートするプラグインを探すか、独自のプラグインを作成してください。
  • 空モードにはコンテンツが含まれておらず、ファイルメタデータのみを操作する場合に役立ちます。