1. ホーム
  2. javascript

[解決済み] GulpのBrowserifyで出力をUglifyする方法とは?

2022-09-08 21:38:22

質問

GulpでBrowserifyの出力をUGL化しようとしたのですが、うまくいきません。

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'));
});

私の理解では、以下のように段階的に作成することはできません。順序を守るために、1つのパイプで作る必要があるのでしょうか?

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');
});

どのように解決するのですか?

1つのことを除いては、かなり近づきましたね。

  • を変換する必要があります。 ストリーミング で与えられるビニール・ファイル・オブジェクトを 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'));
});

または、"left "のように 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 Streamsとストリーミング・ビニール・ファイル・オブジェクトとバッファード・ビニール・ファイル・オブジェクトの間で変換する)だけです。

編集する gulp + browserifyの使用と異なるアプローチに関する長い記事を以下に書きました。 https://medium.com/@sogko/gulp-browserify-the-gulp-y-way-bb359b3f9623