Gulp-header加上合并流会导致故障?

时间:2016-02-13 17:26:26

标签: gulp gulp-header

这是一些令人费解的行为。

我想创建一个gulp任务,1)使用gulp-requirejs-optimize将js文件构建到一个文件中并将其放入build目录,2)将几个config js-files复制到banner.js目录的相关子文件夹,以及3)为这些文件添加标题。

以下是我尝试这样做的方法:

gulp-header文件中,我使用var header = require('gulp-header'); var bannerTemplate = [ '/**', ' * Hello ${name}', ' */' ].join('\n'); var banner = header(bannerTemplate, {name: 'world'}); module.exports = banner; 创建标题:

var gulp = require('gulp');
var merge = require('merge-stream');
var requirejsOptimize = require('gulp-requirejs-optimize');
var banner = require('./banner.js');

gulp.task('js:build:test', function() {
    // this is the entry point for our javascript files;
    // will produce a single main.js file
    var jsEntry = path.join(global.paths.jsDirectory, 'main.js');
    var options = {
        baseUrl: global.paths.jsDirectory,
        mainConfigFile: path.join(global.paths.jsDirectory,
                                  'libs/customized/requirejs/require.config.js'),
        preserveLicenseComments: false
    };
    var jsOutput = path.join(global.paths.buildDirectory, 'js');

    // I am also copying the require.js library and its customization; don't ask why
    var jsForCopy = [
        path.join(global.paths.jsDirectory, 'libs/vendors/requirejs/require.js'),
        path.join(global.paths.jsDirectory, 'libs/customized/requirejs/**/*.js')
    ];

    var requirejsOptimized = gulp.src(jsEntry)
        .pipe(requirejsOptimize(options))
        .pipe(banner)
        .pipe(gulp.dest(jsOutput));

    var copiedJS = gulp.src(jsForCopy, {base: global.paths.root})
        .pipe(banner) // having this line will cause a glitch
        .pipe(gulp.dest(global.paths.buildDirectory));

    return merge(requirejsOptimized, copiedJS);
});

然后,在构建javascript的文件中,我执行以下操作:

banner

所以这里有趣的地方。如果我通过我的main.js只管道正在构建var requirejsOptimized文件的流(我的代码示例中为build),那么一切都很好 - 我得到一个banner文件夹正确的文件和正确的结构:

enter image description here

但是,如果我也管道正在复制其他js文件的流var copiedJS(我的代码示例中为build),那么我的main.js目录的结构将全部通过混乱:

enter image description here

(注意libs的重复以及SELECT * FROM users where email = 'email@example.com' or address = '123456' ORDER BY email = 'email@example.com' 文件夹及其子文件夹的缺失)

所以我的问题是,我在这里做了一件明显错误的事情吗?这是预期的结果还是某种故障?

1 个答案:

答案 0 :(得分:0)

我不会在两个管道中重用call_method2 = program1_class().method2(var1)流。两个管道都在写入和读取同一个流。这就是为什么输出很奇怪。

相反,请为每个管道使用新的横幅流:

更改banner,以便导出创建新横幅广告的功能

banner.js

在主文件中,当需要横幅流时调用该功能

module.exports = function createBannerStream() {
  return header(bannerTemplate, {name: 'world'});
};