2017-01-10 3 views
1

Просмотрели некоторые файлы с глотками. Я не мог не заметить, что для некоторых задач gulp.src(...) использовался для источника файлов. Однако для других задач (например, при использовании браузера) использовались var source = require('vinyl-source-stream'); & .pipe(source('bundle.js')).`gulp.src` vs` vinyl-source-stream`?

Полагаю, что тип потока vinyl-source-stream используется для источника, который используется в gulp, но поскольку браузер был использован напрямую, нам нужно было преобразовать его тип потока в один, совместимый с gulp. Однако, если это действительно так ... то какова была цель buffer = require('vinyl-buffer'); & .pipe(buffer()), потому что, по-видимому, buffer() - это то, что делает преобразование.

[ссылка: https://scotch.io/tutorials/getting-started-with-browserify]

ответ

2

vinyl-source-stream преобразует читаемых потоки в виниловых объектов.

vinyl-buffer превращает потоковый винил в буферный винил.

Виниловый объект может обернуть stream or a buffer, а gulp.dest принимает оба. Тем не менее, несколько плагинов gulp не принимают потоковые винилы. На самом деле,

потоковое не поддерживается

ошибка довольно часто, когда вы начинаете работать с глотком. Для примера, afaik, нет нигдевых нимеров, которые поддерживают потоковые винилы: вам нужно gulp-buffer, чтобы ваш текущий поток работал с такими плагинами.

винилов, полученные от gulp.src являются буферами, но винилы генерируются с vinyl-source-stream из читаемого потока (browserify.bundle() возвращает читаемый поток) не являются, поэтому vinyl-buffer будет необходим использовать несколько плагин с этим, как уродовать.

так, вам не нужно vinyl-buffer сделать только прокрутить страницу браузера и выполнить gulp для совместной работы. Это очень простая задача Глоток будет работать должным образом:

gulp.task('browser' , function(){ 

    return browserify({ 
      debug: true, 
      entries : './browserify-script.js' 
     }) 
     .bundle() 
     .pipe(source('browserify-script.js')) 
     // .pipe(buffer()) //you don't need this, 
     //since gulp-dest accepts both streams and buffers 
     .pipe(gulp.dest('./scripts/')); 

}); 

Однако использовать gulp-uglify плагин, вам нужно buffer:

gulp.task('browser-ugly' , function(){ 
    return bundler = browserify({ 
      debug: true, 
      entries : './browserify-script.js' 
     }) 
     .bundle() 
     .pipe(source('origin.js')) 
     .pipe(buffer()) //you cannot get rid of this. 
     .pipe(uglify()) 
     .pipe(gulp.dest('./scripts/')); 
}); 

С uglify() ожидает буфер. Вырезать строку .pipe(buffer()) приведет к ошибке «потоковой передачи не поддерживается» из плагина uglify.

Однако, как правило, не нужно буфера() с глотком, поскольку gulp.src создает буфер винилы с самого начала:

gulp.task('gulp-uglify' , function(){ 

    gulp.src('simple.js') 
    .pipe(uglify()) //no need to buffer() 
    .pipe(gulp.dest('./scripts')); 
}); 
Смежные вопросы