如果没有现有文件,我怎样才能让gulp写一个文件。
波纹管解决方案适用于gulp 4.0,它位于alpha。
// for when gulp 4.0 releases
.pipe(gulp.dest(conf.plugScss.dist, {overwrite: false}))
答案 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}))
});