这是一些令人费解的行为。
我想创建一个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
文件夹正确的文件和正确的结构:
但是,如果我也管道正在复制其他js文件的流var copiedJS
(我的代码示例中为build
),那么我的main.js
目录的结构将全部通过混乱:
(注意libs
的重复以及SELECT
*
FROM
users
where
email = 'email@example.com'
or
address = '123456'
ORDER BY email = 'email@example.com'
文件夹及其子文件夹的缺失)
所以我的问题是,我在这里做了一件明显错误的事情吗?这是预期的结果还是某种故障?
答案 0 :(得分:0)
我不会在两个管道中重用call_method2 = program1_class().method2(var1)
流。两个管道都在写入和读取同一个流。这就是为什么输出很奇怪。
相反,请为每个管道使用新的横幅流:
更改banner
,以便导出创建新横幅广告的功能
banner.js
在主文件中,当需要横幅流时调用该功能
module.exports = function createBannerStream() {
return header(bannerTemplate, {name: 'world'});
};