我试着把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'));
});

据我所知,我无法按以下步骤完成.我需要在一个管道中制作以保持顺序吗?

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

推荐答案

事实上你离得很近,除了一件事:

  • 你需要转换source()vinyl-buffer给出的streaming个乙烯基文件对象,因为gulp-uglify(以及大多数gulp插件)可以处理buffered个乙烯基文件对象

所以你会用这个来代替

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

或者,您可以 Select 使用vinyl-transform,它可以同时处理streamingbuffered个乙烯基文件对象,如下所示

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流和流式乙烯基文件对象和缓冲乙烯基文件对象之间转换)

编辑:

Node.js相关问答推荐

在渲染上部署Node.js服务器时出错:MODULE_NOT_FOUND

Stripe webhook无法访问Express请求原始正文

构建期间 Docker 容器中的 npm 安装失败

NPM如何管理node_modules传递依赖?

TypeScript Eslint警告了一个AWS客户端构造函数(dynamodb),但没有警告另一个(s3)

Node.js中使用ffmpeg如何获取视频截图的位置?

$not 的聚合版本是什么?

Prisma,只有一个用户的行可以有真值,@@unique(userId, isActive)

如何使用包含条件正确分页的 sequelize 查询?

在 Node JS 中使用 url 链接而不是文件路径

在 Atlas 触发器(Node JS)中正确初始化 Firebase 管理 SDK

为什么我的react 表单不能正常工作?

带权限的机密 Rest-Api - 总是 403 - 我做错了什么?

如何在 Node.js 中逐字节读取二进制文件

在Go中,编写非阻塞代码有意义吗?

为什么模块级返回语句在 Node.js 中起作用?

如何在离线时安装 npm 包?

处理快速异步中间件中的错误

续集findbyid不是一个函数,但显然findAll是

NPM:为什么要安装这个包?