Вы действительно подошли довольно близко, за исключением одного:
- вам необходимо преобразовать объект потокового винилового файла, заданный с
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-bb359b3f9623
gulp-concat
и добавить в конец конвейера gulp. Это будет эквивалентом работыbrowserify <options> > single-file.js
в терминале. Сообщите мне, если я отвечу на ваш вопрос. Ура!vinyl-transform
уже не работает, а ?!Два дополнительных подхода, взятых со страницы NPM винилового источника :
Дано:
Подход 1
Использование gulpify(устарело)Подход 2 Использование винилового источника-потока
Одним из преимуществ второго подхода является то, что он напрямую использует API Browserify, а это означает, что вам не нужно ждать, пока авторы gulpify обновят библиотеку, прежде чем вы сможете.
источник
вы можете попробовать browserify transform uglifyify .
источник