it-swarm.com.ru

Как увеличить вывод с помощью Browserify в Gulp?

Я попытался увеличить вывод Browserify в Gulp, но он не работает.

gulpfile.js

var browserify = require('browserify');
var gulp = require('gulp');
var uglify = require('gulp-uglify');
var source = require('vinyl-source-stream');

gulp.task('browserify', function() {
    return browserify('./source/scripts/app.js')
        .bundle()
        .pipe(source('bundle.js'))
        .pipe(uglify()) // ???
        .pipe(gulp.dest('./build/scripts'));
});

Как я понимаю, я не могу сделать это поэтапно, как показано ниже. Нужно ли делать одну трубу, чтобы сохранить последовательность?

gulp.task('browserify', function() {
    return browserify('./source/scripts/app.js')
        .bundle()
        .pipe(source('bundle.js'))
        .pipe(uglify()) // ???
        .pipe(gulp.dest('./source/scripts'));
});

gulp.task('scripts', function() {
    return grunt.src('./source/scripts/budle.js')
        .pipe(uglify())
        .pipe(gulp.dest('./build/scripts'));
});

gulp.task('default', function(){
    gulp.start('browserify', 'scripts');
});
109
Nik Terentyev

Вы на самом деле довольно близко, за исключением одного:

  • вам нужно конвертировать потоковый объект винилового файла, предоставленный source(), с vinyl-buffer, потому что gulp-uglify (и большинство плагинов gulp) работает с буферизованные объекты виниловых файлов

Так что вместо этого

var browserify = require('browserify');
var gulp = require('gulp');
var uglify = require('gulp-uglify');
var source = require('vinyl-source-stream');
var buffer = require('vinyl-buffer');

gulp.task('browserify', function() {
  return browserify('./source/scripts/app.js')
    .bundle()
    .pipe(source('bundle.js')) // gives streaming vinyl file object
    .pipe(buffer()) // <----- convert from streaming to buffered vinyl file object
    .pipe(uglify()) // now gulp-uglify works 
    .pipe(gulp.dest('./build/scripts'));
});

Или вы можете использовать вместо этого vinyl-transform, который позаботится как о потоковых , так и буферизованных объектах виниловых файлов, например, так

var gulp = require('gulp');
var browserify = require('browserify');
var transform = require('vinyl-transform');
var uglify = require('gulp-uglify');


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

  // use `vinyl-transform` to wrap the regular ReadableStream returned by `b.bundle();` with vinyl file object
  // so that we can use it down a vinyl pipeline
  // while taking care of both streaming and buffered vinyl file objects
  var browserified = transform(function(filename) {
    // filename = './source/scripts/app.js' in this case
    return browserify(filename)
      .bundle();
  });

  return gulp.src(['./source/scripts/app.js']) // you can also use glob patterns here to browserify->uglify multiple files
    .pipe(browserified)
    .pipe(uglify())
    .pipe(gulp.dest('./build/scripts'));
});

Оба вышеперечисленных рецепта достигнут одного и того же.

Речь идет о том, как вы хотите управлять своими каналами (преобразование между обычными потоками NodeJS и потоковыми объектами виниловых файлов и буферизованными объектами виниловых файлов)

Правка: я написал более длинную статью об использовании gulp + browserify и различных подходах по адресу: https://medium.com/@sogko/gulp-browserify-the-gulp-y-way-bb359b3f962

179
Hafiz Ismail

Два дополнительных подхода, взятых со страницы vinyl-source-stream NPM:

Дано:

var source = require('vinyl-source-stream');
var streamify = require('gulp-streamify');
var browserify = require('browserify');
var uglify = require('gulp-uglify');
var gulpify = require('gulpify');
var gulp = require('gulp');

Подход 1  Использование gulpify (Устаревшее)

gulp.task('gulpify', function() {
  gulp.src('index.js')
    .pipe(gulpify())
    .pipe(uglify())
    .pipe(gulp.dest('./bundle.js'));
});

Подход 2 Использование винил-источник-поток

gulp.task('browserify', function() {
  var bundleStream = browserify('index.js').bundle();

  bundleStream
    .pipe(source('index.js'))
    .pipe(streamify(uglify()))
    .pipe(gulp.dest('./bundle.js'));
});

Одно из преимуществ второго подхода заключается в том, что он напрямую использует API-интерфейс Browserify, что означает, что вам не нужно ждать, пока авторы gulpify обновят библиотеку, прежде чем вы сможете это сделать.

12
Drew Noakes

вы можете попробовать преобразовать browserify glifyify .

3
eihero