Gulp写入文件(如果不存在)

时间:2016-08-08 10:58:01

标签: gulp

如果没有现有文件,我怎样才能让gulp写一个文件。

波纹管解决方案适用于gulp 4.0,它位于alpha。

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

2 个答案:

答案 0 :(得分:4)

gulp 3.x中没有确切的等价物,但您可以使用gulp-changed来实现相同的目标。

gulp-changed通常用于仅写入自上次写入目标文件夹以来已更改的文件。但是,您可以提供自定义hasChanged功能。在您的情况下,您可以编写一个函数,但只使用fs.stat()检查文件是否已存在:

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));
});

答案 1 :(得分:0)

我通过gulp-tap解决了这个问题。

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}))
    });