Nik*_*yev 109 javascript node.js uglifyjs browserify gulp
我试图在Gulp中uglify Browserify的输出,但它不起作用.
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'));
});
Run Code Online (Sandbox Code Playgroud)
据我所知,我不能按照以下步骤进行.我是否需要在一个管道中制作以保留序列?
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');
});
Run Code Online (Sandbox Code Playgroud)
Haf*_*ail 182
你真的很接近,除了一件事:
source()有vinyl-buffer,因为gulp-uglify(和最一饮而尽插件)工作在缓冲乙烯基文件对象所以你有这个
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'));
});
Run Code Online (Sandbox Code Playgroud)
或者,你可以选择使用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'));
});
Run Code Online (Sandbox Code Playgroud)
上述两种配方都会达到同样的效果.
它只是关于你想如何管理你的管道(在常规NodeJS Streams和流式乙烯基文件对象和缓冲的乙烯基文件对象之间转换)
编辑:我写了一篇关于使用gulp + browserify以及不同方法的更长文章:https://medium.com/@sogko/gulp-browserify-the-gulp-y-way-bb359b3f9623
Dre*_*kes 12
另外两种方法取自乙烯基源流 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');
Run Code Online (Sandbox Code Playgroud)
方法1 使用gulpify(不建议使用)
gulp.task('gulpify', function() {
gulp.src('index.js')
.pipe(gulpify())
.pipe(uglify())
.pipe(gulp.dest('./bundle.js'));
});
Run Code Online (Sandbox Code Playgroud)
方法2使用乙烯基源流
gulp.task('browserify', function() {
var bundleStream = browserify('index.js').bundle();
bundleStream
.pipe(source('index.js'))
.pipe(streamify(uglify()))
.pipe(gulp.dest('./bundle.js'));
});
Run Code Online (Sandbox Code Playgroud)
第二种方法的一个好处是它直接使用Browserify API,这意味着您不必等待gulpify的作者在您可以之前更新库.