Gulp for 循环内的流无法正常工作
Gulp stream inside a for loop not working properly
我有一个类似于以下的 gulp 任务。我试图遍历并将一个字符串附加到页面,并连接一个相应的文件。
gulp.task('loop', function() {
for(i =0; i < 10; i++) {
gulp.src('./build/ross/templates/pages/_page_home.liquid')
.pipe(plugins.insert.append('Loop ' + i))
// real example has concat here
.pipe(plugins.addSrc('./src/page/_page' + i + '.liquid'))
.pipe(plugins.concat('_page_home.liquid'))
.pipe(gulp.dest('./build/ross/templates/pages/'));
}
});
预期输出类似于
Loop 1
// _page1.liquid contents
Loop 2
// _page2.liquid contents
Loop 3
// _page3.liquid contents
and so on...
实际输出看起来更像
// Original Page Contents here
Loop 9
// _page9.liquid contents
我在循环中对原始文件执行了 fs.readFile
并输出了数据,它只输出原始页面内容,而不输出连接文件或我要附加的字符串。
我还在里面做了一个 console.log(i)
,它显示了正确的数字 1,2,3,4,5,6,7,8,9
。我想知道这是否与 gulp.src()
有关
更新:有时看起来输出内容实际上包含部分_page#.liquid 内容。这有点不一致。
gulp有更好的方法吗?还是我做错了什么?
在 freenode irc 上 #gulpjs 的人们的帮助下,它开始工作了。
这使用 stream-to-promise
和 bluebird
var s2p = require('stream-to-promise');
var Promise = require('bluebird');
gulp.task('loop2', function() {
// don't forget your `var`s!
var buildIt = function(i){
return gulp.src('./build/ross/templates/pages/_page_home.liquid')
.pipe(plugins.insert.append('Loop ' + i))
.pipe(gulp.dest('./build/ross/templates/pages/'))
.on('end', function(){ console.log(i + ' -- done')});
}
var indexes = [];
for(var i = 0; i < 10; i++) {
indexes.push(i);
}
// // sequence them
indexes.reduce(function(p, index){
return p.then(function(){
return s2p(buildIt(index));
});
}, Promise.resolve());
});
我有一个类似于以下的 gulp 任务。我试图遍历并将一个字符串附加到页面,并连接一个相应的文件。
gulp.task('loop', function() {
for(i =0; i < 10; i++) {
gulp.src('./build/ross/templates/pages/_page_home.liquid')
.pipe(plugins.insert.append('Loop ' + i))
// real example has concat here
.pipe(plugins.addSrc('./src/page/_page' + i + '.liquid'))
.pipe(plugins.concat('_page_home.liquid'))
.pipe(gulp.dest('./build/ross/templates/pages/'));
}
});
预期输出类似于
Loop 1
// _page1.liquid contents
Loop 2
// _page2.liquid contents
Loop 3
// _page3.liquid contents
and so on...
实际输出看起来更像
// Original Page Contents here
Loop 9
// _page9.liquid contents
我在循环中对原始文件执行了 fs.readFile
并输出了数据,它只输出原始页面内容,而不输出连接文件或我要附加的字符串。
我还在里面做了一个 console.log(i)
,它显示了正确的数字 1,2,3,4,5,6,7,8,9
。我想知道这是否与 gulp.src()
更新:有时看起来输出内容实际上包含部分_page#.liquid 内容。这有点不一致。
gulp有更好的方法吗?还是我做错了什么?
在 freenode irc 上 #gulpjs 的人们的帮助下,它开始工作了。
这使用 stream-to-promise
和 bluebird
var s2p = require('stream-to-promise');
var Promise = require('bluebird');
gulp.task('loop2', function() {
// don't forget your `var`s!
var buildIt = function(i){
return gulp.src('./build/ross/templates/pages/_page_home.liquid')
.pipe(plugins.insert.append('Loop ' + i))
.pipe(gulp.dest('./build/ross/templates/pages/'))
.on('end', function(){ console.log(i + ' -- done')});
}
var indexes = [];
for(var i = 0; i < 10; i++) {
indexes.push(i);
}
// // sequence them
indexes.reduce(function(p, index){
return p.then(function(){
return s2p(buildIt(index));
});
}, Promise.resolve());
});