2015-01-28 19 views
9

Kaşif makinesi ve faksı paketi ile gulp kullanıyorum. Aşağıdaki kod var:faktörü-paketinin kısmi demetleri üzerinde bazı işlemleri gerçekleştirin

b = browserify({ 
     entries: [ 'a.js', 'b.js'], 
     plugin: [ [ 'factor-bundle', { outputs: [ 'build/a.js', 'build/b.js' ] } ] ] 
    }) 
    .bundle() 
    .pipe(source('bundle.js')) 
    .pipe(buffer()) 
    .pipe(gulp.dest('/build/common')); 

Ben boruya istediğim bazı eylemleri (çirkinleştirmek gibi veya başka bir iş-collapser paket) parial paketleri, ('inşa/a.js' ve 'inşa/b.js üzerinde '). Ben faktör-Paketin sayfasında açıklanan yöntemi kullanmaya çalıştı:

b.plugin('factor-bundle', { outputs: [ write('x'), write('y') ] }); 
function write (name) { 
    return concat(function (body) { 
     console.log('// ----- ' + name + ' -----'); 
     console.log(body.toString('utf8')); 
    }); 
} 

Ama yazma() yöntemini anlamıyorum ve uglification ve nasıl bir sonuç gulp.dest için nasıl gerçekleştirileceği bilmiyorum.
Herhangi bir fikrin var mı? açıklama?

cevap

10

write() yöntemi, ileri akış dönüştürmeleri yoluyla faktör paketi eklentisi tarafından oluşturulan gruplarını paketlemenize olanak veren bir yazılabilir akışı döndürür. Örneğin

, sizin write() yöntem şöyle görünebilir:

var path = require('path'); 
var file = require('gulp-file'); 
var sourcemaps = require('gulp-sourcemaps'); 

function write (filepath) {  
    return concat(function (content) {   
     // create new vinyl file from content and use the basename of the 
     // filepath in scope as its basename. 
     return file(path.basename(filepath), content, { src: true }) 
     // uglify content 
     .pipe(uglify()) 
     // write content to build directory 
     .pipe(gulp.dest('./build/scripts'))   
    }); 
} 

Ve bu gibi kullanmak olacaktır: factor-bundle eklentisini kullanarak

browserify({ 
    entries: [ 'a.js', 'b.js'], 
    plugin: [ [ 'factor-bundle', { outputs: [ write('a.js'), write('b.js') ] } ] ] 
}) 
.bundle() 
.pipe(write('common.js')) 
// Could have use these instead, but it wouldn't be as DRY. 
// .pipe(source('common.js')) 
// .pipe(uglify()) 
// .pipe(gulp.dest('./build/scripts')) 

.bundle() sonra browserify çıktısını etkiler denir. Normal olarak, giriş dosyalarınızın her birine eşleşebilen okunabilir akışlar olarak gruplar oluşturur, daha sonra bunlara daha fazla dönüşüm uygulayabilirsiniz.

Bunun yerine ben Yukarıdaki örnekte üzerinde common.js çağrıda verilen giriş dosyalarından paylaşılan ortak modülleri ile bir paket içeren tek okunabilir akışı alacak. Daha sonra, her giriş dosyasına eşlenen okunabilir akışların transfomasyonlarını ele almanız gerekir. I çıkışları diziye yazılabilir akışları ekledikten Yukarıdaki örnekte

, okunabilir akışı olarak, kendi paketleri verilmesi ve bunlara başka dönüşümler geçerli zaman giriş dosyaları, aynı sırada düzenlenmiş

Yapabilirdin

var b = browserify({ ... }); 

b.on('factor.pipeline', function (id, pipeline) { 
    pipeline.get('wrap').push(write(id)); 
}); 

b.plugin(factor); 

return b.bundle().pipe(write('common.js')); 

Ben çıkışlar daha da aşağı çalışmalarını uygulayarak tamamen boru hattından müstakil olması dikkati çekiyor düşünüyorum: Ayrıca factor.pipelineevent kaldıraç. Eğer gulp kullanıyor ve akışını tarayıcıdan döndürdüyseniz, görev zamanından önce tamamlanmış olacaktı, çünkü hala giriş dosyalarında işlem gerçekleştiriyordu. Bununla henüz sorunlarına katılmadım.

Bu yardımcı olur umarım.

+1

Detaylı çözüm için teşekkürler. Sorunun tamamlanmasını temsil etmeyen akışı iade ettiğim sorunu nasıl çözeceğime dair bir fikriniz var mı? – Naor

İlgili konular