Skip to content

Commit 7987e6a

Browse files
committed
Merge pull request #1234 from RReverser/pure-cjs
Switched from browserify to pure-cjs bundler.
2 parents d88d479 + 3f3187c commit 7987e6a

File tree

6 files changed

+117
-137
lines changed

6 files changed

+117
-137
lines changed

Gruntfile.js

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
var exec = require('child_process').exec;
44
var jsxTask = require('./grunt/tasks/jsx');
5-
var browserifyTask = require('./grunt/tasks/browserify');
5+
var bundleTask = require('./grunt/tasks/bundle');
66
var populistTask = require('./grunt/tasks/populist');
77
var webdriverPhantomJSTask = require('./grunt/tasks/webdriver-phantomjs');
88
var webdriverJasmineTasks = require('./grunt/tasks/webdriver-jasmine');
@@ -19,7 +19,7 @@ module.exports = function(grunt) {
1919
pkg: grunt.file.readJSON('package.json'),
2020
copy: require('./grunt/config/copy'),
2121
jsx: require('./grunt/config/jsx'),
22-
browserify: require('./grunt/config/browserify'),
22+
bundle: require('./grunt/config/bundle'),
2323
populist: require('./grunt/config/populist'),
2424
connect: require('./grunt/config/server')(grunt),
2525
"webdriver-jasmine": require('./grunt/config/webdriver-jasmine'),
@@ -52,8 +52,8 @@ module.exports = function(grunt) {
5252
// Register jsx:normal and :release tasks.
5353
grunt.registerMultiTask('jsx', jsxTask);
5454

55-
// Our own browserify-based tasks to build a single JS file build
56-
grunt.registerMultiTask('browserify', browserifyTask);
55+
// Our own bundle-based tasks to build a single JS file build
56+
grunt.registerMultiTask('bundle', bundleTask);
5757

5858
grunt.registerMultiTask('populist', populistTask);
5959

@@ -71,22 +71,22 @@ module.exports = function(grunt) {
7171

7272
grunt.registerTask('version-check', versionCheckTask);
7373

74-
grunt.registerTask('build:basic', ['jsx:normal', 'version-check', 'browserify:basic']);
75-
grunt.registerTask('build:addons', ['jsx:normal', 'browserify:addons']);
76-
grunt.registerTask('build:transformer', ['jsx:normal', 'browserify:transformer']);
77-
grunt.registerTask('build:min', ['jsx:normal', 'version-check', 'browserify:min']);
78-
grunt.registerTask('build:addons-min', ['jsx:normal', 'browserify:addonsMin']);
74+
grunt.registerTask('build:basic', ['jsx:normal', 'version-check', 'bundle:basic']);
75+
grunt.registerTask('build:addons', ['jsx:normal', 'bundle:addons']);
76+
grunt.registerTask('build:transformer', ['jsx:normal', 'bundle:transformer']);
77+
grunt.registerTask('build:min', ['jsx:normal', 'version-check', 'bundle:min']);
78+
grunt.registerTask('build:addons-min', ['jsx:normal', 'bundle:addonsMin']);
7979
grunt.registerTask('build:withCodeCoverageLogging', [
8080
'jsx:normal',
8181
'version-check',
82-
'browserify:withCodeCoverageLogging'
82+
'bundle:withCodeCoverageLogging'
8383
]);
8484
grunt.registerTask('build:perf', [
8585
'jsx:normal',
8686
'version-check',
87-
'browserify:transformer',
88-
'browserify:basic',
89-
'browserify:min',
87+
'bundle:transformer',
88+
'bundle:basic',
89+
'bundle:min',
9090
'download-previous-version'
9191
]);
9292
grunt.registerTask('build:test', [
@@ -195,11 +195,11 @@ module.exports = function(grunt) {
195195
'delete-build-modules',
196196
'jsx:normal',
197197
'version-check',
198-
'browserify:basic',
199-
'browserify:transformer',
200-
'browserify:addons',
201-
'browserify:min',
202-
'browserify:addonsMin',
198+
'bundle:basic',
199+
'bundle:transformer',
200+
'bundle:addons',
201+
'bundle:min',
202+
'bundle:addonsMin',
203203
'npm-react:release',
204204
'npm-react:pack',
205205
'npm-react-tools:pack',

grunt/config/browserify.js renamed to grunt/config/bundle.js

Lines changed: 58 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,11 @@
33

44
'use strict';
55

6+
var deamdify = require('deamdify');
67
var envify = require('envify/custom');
78
var es3ify = require('es3ify');
89
var grunt = require('grunt');
910
var UglifyJS = require('uglify-js');
10-
var uglifyify = require('uglifyify');
1111
var _ = require('lodash');
1212

1313
var SIMPLE_TEMPLATE =
@@ -55,66 +55,76 @@ function simpleBannerify(src) {
5555
'\n' + src;
5656
}
5757

58-
// Our basic config which we'll add to to make our other builds
58+
function override(obj1, obj2) {
59+
return _.merge({}, obj1, obj2, function (a, b) {
60+
if (_.isArray(a)) {
61+
return b;
62+
}
63+
})
64+
}
65+
5966
var basic = {
60-
entries: [
61-
'./build/modules/React.js'
62-
],
63-
outfile: './build/react.js',
64-
debug: false,
65-
standalone: 'React',
66-
transforms: [envify({NODE_ENV: 'development'})],
67-
after: [es3ify.transform, simpleBannerify]
67+
src: './build/modules/React.js',
68+
dest: './build/react.js',
69+
options: {
70+
debug: false,
71+
standalone: 'React',
72+
transforms: [envify({NODE_ENV: 'development'})],
73+
after: [es3ify.transform, simpleBannerify]
74+
}
6875
};
6976

70-
var min = _.merge({}, basic, {
71-
outfile: './build/react.min.js',
72-
debug: false,
73-
transforms: [envify({NODE_ENV: 'production'}), uglifyify],
74-
after: [minify, bannerify]
77+
var min = override(basic, {
78+
dest: './build/react.min.js',
79+
options: {
80+
debug: false,
81+
transforms: [envify({NODE_ENV: 'production'})],
82+
after: [minify, bannerify]
83+
}
7584
});
7685

7786
var transformer = {
78-
entries:[
79-
'./vendor/browser-transforms.js'
80-
],
81-
outfile: './build/JSXTransformer.js',
82-
debug: false,
83-
standalone: 'JSXTransformer',
84-
after: [es3ify.transform, simpleBannerify]
87+
src: './vendor/browser-transforms.js',
88+
dest: './build/JSXTransformer.js',
89+
options: {
90+
debug: false,
91+
standalone: 'JSXTransformer',
92+
transforms: [deamdify],
93+
after: [es3ify.transform, simpleBannerify]
94+
}
8595
};
8696

8797
var addons = {
88-
entries: [
89-
'./build/modules/ReactWithAddons.js'
90-
],
91-
outfile: './build/react-with-addons.js',
92-
debug: false,
93-
standalone: 'React',
94-
transforms: [envify({NODE_ENV: 'development'})],
95-
packageName: 'React (with addons)',
96-
after: [es3ify.transform, simpleBannerify]
98+
src: './build/modules/ReactWithAddons.js',
99+
dest: './build/react-with-addons.js',
100+
options: {
101+
debug: false,
102+
standalone: 'React',
103+
transforms: [envify({NODE_ENV: 'development'})],
104+
packageName: 'React (with addons)',
105+
after: [es3ify.transform, simpleBannerify]
106+
}
97107
};
98108

99-
var addonsMin = _.merge({}, addons, {
100-
outfile: './build/react-with-addons.min.js',
101-
debug: false,
102-
transforms: [envify({NODE_ENV: 'production'}), uglifyify],
103-
after: [minify, bannerify]
109+
var addonsMin = override(addons, {
110+
dest: './build/react-with-addons.min.js',
111+
options: {
112+
debug: false,
113+
transforms: [envify({NODE_ENV: 'production'})],
114+
after: [minify, bannerify]
115+
}
104116
});
105117

106-
var withCodeCoverageLogging = {
107-
entries: [
108-
'./build/modules/React.js'
109-
],
110-
outfile: './build/react.js',
111-
debug: true,
112-
standalone: 'React',
113-
transforms: [
114-
envify({NODE_ENV: 'development'}),
115-
require('coverify')
116-
]
117-
};
118+
var withCodeCoverageLogging = override(basic, {
119+
options: {
120+
debug: true,
121+
transforms: [
122+
envify({NODE_ENV: 'development'}),
123+
require('coverify')
124+
],
125+
after: []
126+
}
127+
});
118128

119129
module.exports = {
120130
basic: basic,

grunt/tasks/browserify.js

Lines changed: 0 additions & 68 deletions
This file was deleted.

grunt/tasks/bundle.js

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
'use strict';
2+
3+
var cjs = require('pure-cjs');
4+
var grunt = require('grunt');
5+
6+
module.exports = function() {
7+
var config = this.options({
8+
transforms: [],
9+
after: []
10+
});
11+
12+
// This task is async...
13+
var done = this.async();
14+
15+
// Extract options
16+
var options = {
17+
input: this.files[0].src[0],
18+
output: this.files[0].dest,
19+
map: config.debug, // sourcemaps
20+
exports: config.standalone, // global
21+
transform: config.transforms,
22+
dryRun: true // we will write to disk ourselves
23+
};
24+
25+
// Actually bundle it up
26+
var _this = this;
27+
28+
cjs.transform(options).then(function(result) {
29+
grunt.file.write(result.options.output, config.after.reduce(function(src, fn) {
30+
return fn.call(_this, src);
31+
}, result.code));
32+
33+
done();
34+
}, function(err) {
35+
grunt.log.error(err);
36+
done(false);
37+
});
38+
};

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,8 @@
3939
},
4040
"devDependencies": {
4141
"benchmark": "~1.0.0",
42-
"browserify": "~3.20.0",
4342
"coverify": "~1.0.4",
43+
"deamdify": "~0.1.1",
4444
"envify": "~1.2.0",
4545
"es3ify": "~0.1.2",
4646
"es5-shim": "~2.3.0",
@@ -61,6 +61,7 @@
6161
"phantomjs": "~1.9",
6262
"platform": "~1.0.0",
6363
"populist": "~0.1.6",
64+
"pure-cjs": "~1.9.0",
6465
"recast": "~0.5.6",
6566
"sauce-tunnel": "~1.1.0",
6667
"semver": "~2.2.1",

vendor/browser-transforms.js

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
var runScripts;
2121
var headEl;
2222

23-
var buffer = require('buffer');
2423
var transform = require('jstransform').transform;
2524
var visitors = require('./fbtransform/visitors').transformVisitors;
2625
var docblock = require('jstransform/src/docblock');
@@ -123,7 +122,7 @@ var transformCode = function(code, source) {
123122
return (
124123
transformed.code +
125124
'//# sourceMappingURL=data:application/json;base64,' +
126-
buffer.Buffer(JSON.stringify(map)).toString('base64')
125+
btoa(unescape(encodeURIComponent(JSON.stringify(map))))
127126
);
128127
} else {
129128
return code;

0 commit comments

Comments
 (0)