更改其他gulp的EventStream中的其他文件

时间:2016-09-12 15:51:54

标签: gulp

我有一个有趣的问题。是否可以在gulp内部的开放流(EventStream)中更改一些文件?

我有那些东西。我想在打开的流中读取一些文件并将其写入其他文件。我怎么能这样做?感谢。

gulp.task('handleGlobalStorage', function () {
  return gulp.src('./global_storage.js')
    .pipe(setEnvHostAndProxy())
    .pipe(gulp.dest('./built'));
});

function setEnvHostAndProxy() {
  return es.map(function(file, cb) {
     var fileContent = file.contents.toString();
     //some changes inside content
     // if (!gutil.env.dev) return;
     /* I have stuff that fetched from file and I modify it that I send it 
        down to pipe. But also I want to insert this stuff inside other 
        file. How I can do it? Should I create WritableStream of that file    
        and merge it ?*/
     file.contents = new Buffer(fileContent);
     // send the updated file down the pipe
     cb(null, file);
  });
}

1 个答案:

答案 0 :(得分:0)

我解决了这个问题,这里是解决方案(我不会显示所有代码,只是一般)。主要的概念是 - 打开文件并在管道内编写新内容:)这就是全部。

function setEnvHostAndProxy() {
        var bsConfigFileContent = fs.readFileSync('./bs-config.js', 'utf8'),
            bsConfigProxyPattern = /(proxyUrl\s?=\s?)["|'](.*)["|']/;

    return es.map(function (file, cb) {
        var fileContent = file.contents.toString(),
            prodHost = fileContent.match(generateRegExpForHosts('prodHost'))[1],
            prodProxy = fileContent.match(generateRegExpForHosts('prodProxy'))[1],
            devProxy = fileContent.match(generateRegExpForHosts('devProxy'))[1],
            devHost = fileContent.match(generateRegExpForHosts('devHost'))[1],
            changedBsConfigFileStream,
            res;

        if (!gutil.env.dev) {
           res = prodHandler();
            changedBsConfigFileStream = bsConfigHandler(prodHost);
        } else {
            res = devHandler();
            changedBsConfigFileStream = bsConfigHandler(devProxy);
        }

        fs.writeFile('./bs-config.js', changedBsConfigFileStream, 'utf8', function (err) {
            if (err) throw (err);
        });

        file.contents = new Buffer(res);

        cb(null, file);
} });