# Browserify + Globs
[Browserify + Uglify2](https://github.com/gulpjs/gulp/blob/master/docs/recipes/browserify-uglify-sourcemap.md) 展示了如何设置一个基础的 gulp 任务来把一个 JavaScript 文件以及它的依赖打包,并且使用 UglifyJS 压缩并且保留 source map。 然而这还不够,这里还将会展示如何使用 gulp 和 Browserify 将多个文件打包到一起。
同时请看: [组合 Streams 来处理错误](https://github.com/gulpjs/gulp/blob/master/docs/recipes/combining-streams-to-handle-errors.md) 范例来查看如何处理你的 stream 中 browserify 或者 uglify 的错误。
```
'use strict';
var browserify = require('browserify');
var gulp = require('gulp');
var source = require('vinyl-source-stream');
var buffer = require('vinyl-buffer');
var globby = require('globby');
var through = require('through2');
var gutil = require('gulp-util');
var uglify = require('gulp-uglify');
var sourcemaps = require('gulp-sourcemaps');
var reactify = require('reactify');
gulp.task('javascript', function () {
// gulp 希望任务能返回一个 stream,因此我们在这里创建一个
var bundledStream = through();
bundledStream
// 将输出的 stream 转化成为一个包含 gulp 插件所期许的一些属性的 stream
.pipe(source('app.js'))
// 剩下的部分,和你往常缩写的一样。
// 这里我们直接拷贝 Browserify + Uglify2 范例的代码。
.pipe(buffer())
.pipe(sourcemaps.init({loadMaps: true}))
// 在这里将相应 gulp 插件加入管道
.pipe(uglify())
.on('error', gutil.log)
.pipe(sourcemaps.write('./'))
.pipe(gulp.dest('./dist/js/'));
// "globby" 替换了往常的 "gulp.src" 为 Browserify
// 创建的可读 stream。
globby(['./entries/*.js'], function(err, entries) {
// 确保任何从 globby 发生的错误都被捕获到
if (err) {
bundledStream.emit('error', err);
return;
}
// 创建 Browserify 实例
var b = browserify({
entries: entries,
debug: true,
transform: [reactify]
});
// 将 Browserify stream 接入到我们之前创建的 stream 中去
// 这里是 gulp 式管道正式开始的地方
b.bundle().pipe(bundledStream);
});
// 最后,我们返回这个 stream,这样 gulp 会知道什么时候这个任务会完成
return bundledStream;
});
```
- gulp 中文文档
- 入门指南
- gulp API 文档
- 编写插件
- 指导
- 使用 buffer
- 使用 Stream 处理
- 测试
- FAQ
- gulp 技巧集
- 整合 streams 来处理错误
- 删除文件和文件夹
- 使用 watchify 加速 browserify 编译
- 增量编译打包,包括处理整所涉及的所有文件
- 将 buffer 变为 stream (内存中的内容)
- 在 gulp 中运行 Mocha 测试
- 仅仅传递更改过的文件
- 从命令行传递参数
- 只重新编译被更改过的文件
- 每个文件夹生成单独一个文件
- 串行方式运行任务,亦即,任务依赖
- 拥有实时重载(live-reloading)和 CSS 注入的服务器
- 通过 stream 工厂来共享 stream
- 指定一个新的 cwd (当前工作目录)
- 分离任务到多个文件中
- 使用外部配置文件
- 在一个任务中使用多个文件来源
- Browserify + Uglify2 和 sourcemaps
- Browserify + Globs
- 同时输出一个压缩过和一个未压缩版本的文件
- 改变版本号以及创建一个 git tag
- Swig 以及 YAML front-matter 模板