問題描述
我試圖在 Gulp 中對 Browserify 的輸出進行 uglify,但它不起作用.
I tried to uglify output of Browserify in Gulp, but it doesn't work.
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'));
});
據我了解,我無法按照以下步驟進行操作.我需要在一個管道中制作以保留序列嗎?
As I understand I cannot make it in steps as below. Do I need to make in one pipe to preserve the sequence?
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');
});
推薦答案
其實你們已經很接近了,除了一件事:
You actually got pretty close, except for one thing:
- 您需要將
source()
給出的 streaming 乙烯基文件對象轉換為vinyl-buffer
因為gulp-uglify
(和大多數 gulp 插件)適用于緩沖乙烯基文件對象
- you need to convert the streaming vinyl file object given by
source()
withvinyl-buffer
becausegulp-uglify
(and most gulp plugins) works on buffered vinyl file objects
所以你會用這個來代替
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
代替它為您處理 streaming 和 buffered 乙烯基文件對象,例如所以
Or, you can choose to use vinyl-transform
instead which takes care of both streaming and buffered vinyl file objects for you, like so
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'));
});
以上兩種方法都可以達到相同的效果.
Both of the above recipes will achieve the same thing.
這只是關于您希望如何管理管道(在常規 NodeJS 流和流式乙烯基文件對象和緩沖乙烯基文件對象之間進行轉換)
Its just about how you want to manage your pipes (converting between regular NodeJS Streams and streaming vinyl file objects and buffered vinyl file objects)
我寫了一篇關于使用 gulp + browserify 和不同方法的較長文章:https://medium.com/@sogko/gulp-browserify-the-gulp-y-way-bb359b3f9623
I've written a longer article regarding using gulp + browserify and different approaches at: https://medium.com/@sogko/gulp-browserify-the-gulp-y-way-bb359b3f9623
這篇關于如何在 Gulp 中使用 Browserify 丑化輸出?的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!