2014-07-17 3 views
1

이 함수의 반환 값은 스트림이어야합니다. 손목 시계가 아닌 모드에서 쉽습니다. 그냥 rebundle을 반환, 스트림을 변환 브라우저, 어쩌구, 괜찮아. 그러나 시계 모드에서는 각 업데이트마다 rebundle이 실행되고 매번 새로운 스트림이 만들어집니다. 생성 된 모든 스트림을 하나의 무한 스트림으로 통합하여 반환 할 수있는 방법이 필요합니다. 실제로 스트림에서 소비 될 수 있습니다. 결합 된 스트림으로 재생하면 데이터가 읽히고 스트림이 쓰기 불가능 해지면 아무 일도없는 것처럼 보입니다. 어떤 도움을 주시면 감사하겠습니다!스트림 노드 결합

var bundleify = function(watch) { 

    var bundler = (watch?watchify:browserify)('main.js'); 

    var rebundle = function() { 
     return bundler.bundle() 
      .on('error', console.log) 
      .pipe(source('main.js')) 
      .pipe(rename('app.js')) 
      .pipe(jsTasks()); // lazypipe with other tasks 
    }; 

    // Regular browserify, just return the stream. 
    if (!watch) { 
     return rebundle(); 
    } 

    // Watchify, rebundle on update. 
    bundler.on('update', function() { 
     rebundle(); 
    }); 

    // return ???? 
} 
+0

나는 당신이 성취하려는 것을 혼동합니다. 문자열과 같이 취급하는 종류의 스트림을 연결하는 것과 같은 작업을하려고하십니까? (한 스트림이 완전히 먼저, 다음 스트림이 다음으로 다음 스트림) 아니면 데이터를 삽입하려고합니까? –

답변

0

다음은 내가 생각해 낸 해결책입니다. 그것은 꽤 빈민굴이다 (나는 시냇물에 대한 큰 이해가 없다). 그러나 그것이 작동하는 것처럼 보인다. 더 좋은 방법을 찾는 데 여전히 관심이 있습니다.

var outstream = through2.obj(); 
var interceptor = function(){ 
    return through2.obj(function(obj, enc, cb) { 
     outstream.push(obj); 
     cb() 
    }); 
} 

bundler.on('update', function() { 
    rebundle().pipe(interceptor()); 
}); 

rebundle().pipe(interceptor()); 
return outstream; 
관련 문제