forked from facebook/react
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbrowserify.js
69 lines (55 loc) · 1.71 KB
/
browserify.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
'use strict';
var browserify = require('browserify');
var grunt = require('grunt');
module.exports = function() {
var config = this.data;
// This task is async...
var done = this.async();
// More/better assertions
// grunt.config.requires('outfile');
// grunt.config.requires('entries');
config.transforms = config.transforms || [];
config.globalTransforms = config.globalTransforms || [];
config.plugins = config.plugins || [];
config.after = config.after || [];
// create the bundle we'll work with
var entries = grunt.file.expand(config.entries);
// Extract other options
var options = {
entries: entries,
debug: config.debug, // sourcemaps
standalone: config.standalone, // global
insertGlobalVars: {
// We can remove this when we remove the few direct
// process.env.NODE_ENV checks against "test".
// The intention is to avoid embedding Browserify's `process` shim
// because we don't really need it.
// See https://github.com/facebook/react/pull/7245 for context.
process: function() {
return 'undefined';
},
},
};
var bundle = browserify(options);
config.transforms.forEach(function(transform) {
bundle.transform({}, transform);
});
config.globalTransforms.forEach(function(transform) {
bundle.transform({global: true}, transform);
});
config.plugins.forEach(bundle.plugin, bundle);
// Actually bundle it up
var _this = this;
bundle.bundle(function(err, buf) {
if (err) {
grunt.log.error(err);
return done();
}
var src = buf.toString();
config.after.forEach(function(fn) {
src = fn.call(_this, src);
});
grunt.file.write(config.outfile, src);
done();
});
};