Enable (and apply) global transforms with browserify
This ensures that we can consume code from npm that has our process.env pattern. Unfortunately we'll run the same transform on minified builds but it's pretty quick.
Paul O’Shannessy committed
Jul 20, 2015 at 14:29 UTC
6fc53e043876f5b53b144847faaeb7ea4398f9c3
2 files changed
+17
-4
grunt/config/browserify.js
+12
-4
@@ -9,6 +9,9 @@ var uglifyify = require('uglifyify');
9
var derequire = require('derequire');
10
var collapser = require('bundle-collapser/plugin');
11
12
+var envifyDev = envify({NODE_ENV: process.env.NODE_ENV || 'development'});
13
+var envifyProd = envify({NODE_ENV: process.env.NODE_ENV || 'production'});
14
+
15
var SIMPLE_TEMPLATE =
16
'/**\n\
17
* @PACKAGE@ v@VERSION@\n\
@@ -56,7 +59,8 @@ var basic = {
59
outfile: './build/react.js',
60
debug: false,
61
standalone: 'React',
59
- transforms: [envify({NODE_ENV: process.env.NODE_ENV || 'development'})],
62
+ // Apply as global transform so that we also envify fbjs and any other deps
63
+ globalTransforms: [envifyDev],
64
plugins: [collapser],
65
after: [derequire, simpleBannerify],
66
};
@@ -68,7 +72,10 @@ var min = {
72
outfile: './build/react.min.js',
73
debug: false,
74
standalone: 'React',
71
- transforms: [envify({NODE_ENV: process.env.NODE_ENV || 'production'}), uglifyify],
75
+ // Envify twice. The first ensures that when we uglifyify, we have the right
76
+ // conditions to exclude requires. The global transform runs on deps.
77
+ transforms: [envifyProd, uglifyify],
78
+ globalTransforms: [envifyProd],
79
plugins: [collapser],
80
// No need to derequire because the minifier will mangle
81
// the "require" calls.
@@ -100,7 +107,7 @@ var addons = {
107
debug: false,
108
standalone: 'React',
109
packageName: 'React (with addons)',
103
- transforms: [envify({NODE_ENV: process.env.NODE_ENV || 'development'})],
110
+ globalTransforms: [envifyDev],
111
plugins: [collapser],
112
after: [derequire, simpleBannerify],
113
};
@@ -113,7 +120,8 @@ var addonsMin = {
120
debug: false,
121
standalone: 'React',
122
packageName: 'React (with addons)',
116
- transforms: [envify({NODE_ENV: process.env.NODE_ENV || 'production'}), uglifyify],
123
+ transforms: [envifyProd, uglifyify],
124
+ globalTransforms: [envifyProd],
125
plugins: [collapser],
126
// No need to derequire because the minifier will mangle
127
// the "require" calls.
grunt/tasks/browserify.js
+5
@@ -13,6 +13,7 @@ module.exports = function() {
13
// grunt.config.requires('outfile');
14
// grunt.config.requires('entries');
15
config.transforms = config.transforms || [];
16
+ config.globalTransforms = config.globalTransforms || [];
17
config.plugins = config.plugins || [];
18
config.after = config.after || [];
19
config.paths = config.paths || [];
@@ -35,6 +36,10 @@ module.exports = function() {
36
bundle.transform({}, transform);
37
});
38
39
+ config.globalTransforms.forEach(function(transform) {
40
+ bundle.transform({global: true}, transform);
41
+ });
42
+
43
config.plugins.forEach(bundle.plugin, bundle);
44
45
// Actually bundle it up