2016-05-27 1 views
0

大規模なアプリケーションでデザインファイルを埋め込み、コンパイル、および配布するプロセスを改善するワークフローを設定しています。私はこのワークフローのためにgulpを使いたいと思っていますが、そうするには一種の同期ダウンプロセスが必要です。ローカルディレクトリのファイルが最初にプロダクション(リモート)ディレクトリのファイルの状態を反映していることを確認してください。gulpを使用して既に存在するファイルのみをオーバーライドするのは宛先ディレクトリ

ローカルに存在する必要のない何千もの自動的に生成されたファイルが含まれているため、リモートディレクトリの状態全体を取得したくありません。リモートサーバから新しいバージョンを取得する前に、ファイル名の一致を確認するために目的地を確認するにはどうすればよいですか?最近のファイルは気にしませんが、パスとファイル名に一致するものをすべて上書きするだけです。あなたはまだ先にあるファイルを引っ張るしたいので

答えて

0

、私はどうなる:

var gulp = require('gulp'); 
var gt = require('through-gulp'); 
var read = require('gulp-read'); 

var remote_source_dir = "src/"; // must end with/

gulp.src('destination/**/*', {read:false}) 
    .pipe(gt(function(vinyl,enc,cb) { 
    vinyl.path = remote_source_dir + vinyl.relative; 
    vinyl.base = remote_source_dir; 
    cb(null, vinyl); 
    })) 
    .pipe(read()) 
    .pipe(gulp.dest("destination")); 

背景:ガルプ・ストリームは、「ビニル」オブジェクトを使用します。基本的にファイルパスとファイルの内容が含まれています。続きを読むhere

gulp.src()呼び出しは、更新する宛先のすべてのファイル名を取得します。読み込みをfalseに設定して、読み込み先ディレクトリ内のファイルの実際の内容を読み込まないようにします(内容は実際に読み込み元のディレクトリから読み込むためです)。

gt()は変換ストリームを作成し、すべてのビニールオブジェクトは指定された関数を通過します。この関数は、ファイルのパスとベースを調整して、(リモートの)ソースディレクトリを指すようにします。 cb(null, vinyl);は最終的に変換の結果を報告します。

次に、read()は、ファイルの内容をvinylオブジェクトに読み込むことによって正しいソースファイル名を含むビニールを変換します。

最後にgulp.dest()は、指定された宛先ディレクトリにファイルを書き込みます。

ヒント:テストの場合、gulp.dest()関数の引数を"destination"のように変更することができます。 "destination2"と入力し、コピーしたファイルを別のディレクトリに出力します。次に、destinationとdestination2のディレクトリを比較して、正しい操作を確認します。

注:出力先ディレクトリの一部のファイルがソースディレクトリに存在しない場合、スクリプトは失敗します。コピー先ディレクトリ内の特定のファイルをコピーから除外する場合は、gulp-filtergulp.src()gt()の間を使用できます。または、gt()トランスフォームストリームでファイル名をプログラムで確認し、スキップするファイルにcb(null, vinyl)の代わりにcb()とだけ呼び出すこともできます。

関連する問題