2016-08-08 16 views
0

既存のファイルがない場合にのみ、gulpにファイルを書き込む方法を教えてください。Gulp書き込みファイルが存在しない場合

ベロー溶液はアルファにある腐食4.0のために働く。

// for when gulp 4.0 releases 
.pipe(gulp.dest(conf.plugScss.dist, {overwrite: false})) 

答えて

2

は一気3.xのには、完全に同等ではありませんが、あなたは同じことを達成するためにgulp-changedを使用することができます。

gulp-changedは、通常、宛先フォルダに最後に書き込まれてから変更されたファイルだけを書き込むために使用されます。ただし、カスタムhasChanged機能を提供することができます。

var gulp = require('gulp'); 
var changed = require('gulp-changed'); 
var fs = require('fs'); 

function compareExistence(stream, cb, sourceFile, targetPath) { 
    fs.stat(targetPath, function(err, stats) { 
    if (err) { 
     stream.push(sourceFile); 
    } 
    cb(); 
    }); 
} 

gulp.task('default', function() { 
    return gulp.src(/*...*/) 
    .pipe(changed(conf.plugScss.dist, {hasChanged: compareExistence})) 
    .pipe(gulp.dest(conf.plugScss.dist)); 
}); 
+0

ありがとうございました。私はすでにそれを解決しました。下の私の答えを見てください。しかしそれを公正に保つために、あなたはそれを解決しました。 +1 – dewwwald

0

私は一口タップして行くことによってそれを解決:あなたのケースでは、ファイルが既にfs.stat()を使用して存在する場合、関数は何もなく、チェックしないん書くことができます。

conf.plugScss.files.forEach(function (file, index, files) 
    { 
     gulp.src(file) 
      .pipe(rename({ 
       prefix: "_", 
       extname: ".scss" 
      })) 
      .pipe(tap(function (file, t) 
      { 
       file.contents = Buffer.concat([ 
        new Buffer('HEADER'), 
        file.contents 
       ]); 
       var fileCheck = function(err, stat) { 
        if (err !== null && err.code == 'ENOENT') 
        { 
         fs.writeFile('dist/' + file.path.split('/').reverse()[0], file.contents) 
        } 
        return null; 
       } 
       fs.stat('dist/' + file.path.split('/').reverse()[0], fileCheck.bind(this)); 
      })); 
      // for when gulp 4.0 releases 
      // .pipe(gulp.dest(conf.plugScss.dist, {overwrite: false})) 
    }); 
関連する問題