CommonJS builder config to Grunt style for easier handling and readability.
Ingvar Stepanyan committed
Mar 11, 2014 at 13:40 UTC
25773ed1b39a20e0beaedefb0bd618e1bea5164e
2 files changed
+65
-61
grunt/config/commonjs.js
+57
-48
@@ -55,67 +55,76 @@ function simpleBannerify(src) {
55
'\n' + src;
56
}
57
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
+
66
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
+ }
75
};
76
70
-var min = _.merge({}, basic, {
71
- outfile: './build/react.min.js',
72
- debug: false,
73
- transforms: [envify({NODE_ENV: 'production'})],
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
+ }
84
});
85
86
var transformer = {
78
- entries:[
79
- './vendor/browser-transforms.js'
80
- ],
81
- outfile: './build/JSXTransformer.js',
82
- debug: false,
83
- standalone: 'JSXTransformer',
84
- transforms: [deamdify],
85
- 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
+ }
95
};
96
97
var addons = {
89
- entries: [
90
- './build/modules/ReactWithAddons.js'
91
- ],
92
- outfile: './build/react-with-addons.js',
93
- debug: false,
94
- standalone: 'React',
95
- transforms: [envify({NODE_ENV: 'development'})],
96
- packageName: 'React (with addons)',
97
- 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
+ }
107
};
108
100
-var addonsMin = _.merge({}, addons, {
101
- outfile: './build/react-with-addons.min.js',
102
- debug: false,
103
- transforms: [envify({NODE_ENV: 'production'})],
104
- 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
+ }
116
});
117
107
-var withCodeCoverageLogging = {
108
- entries: [
109
- './build/modules/React.js'
110
- ],
111
- outfile: './build/react.js',
112
- debug: true,
113
- standalone: 'React',
114
- transforms: [
115
- envify({NODE_ENV: 'development'}),
116
- require('coverify')
117
- ]
118
-};
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
+});
128
129
module.exports = {
130
basic: basic,
grunt/tasks/commonjs.js
+8
-13
@@ -4,24 +4,18 @@ var cjs = require('pure-cjs');
4
var grunt = require('grunt');
5
6
module.exports = function() {
7
- var config = this.data;
7
+ var config = this.options({
8
+ transforms: [],
9
+ after: []
10
+ });
11
12
// This task is async...
13
var done = this.async();
14
12
- // More/better assertions
13
- // grunt.config.requires('outfile');
14
- // grunt.config.requires('entries');
15
- config.transforms = config.transforms || [];
16
- config.after = config.after || [];
17
- if (typeof config.after === 'function') {
18
- config.after = [config.after];
19
- }
20
-
15
// Extract options
16
var options = {
23
- input: config.entries[0],
24
- output: config.outfile,
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,
@@ -30,8 +24,9 @@ module.exports = function() {
24
25
// Actually bundle it up
26
var _this = this;
27
+
28
cjs.transform(options).then(function(result) {
34
- grunt.file.write(config.outfile, config.after.reduce(function(src, fn) {
29
+ grunt.file.write(_this.files[0].dest, config.after.reduce(function(src, fn) {
30
return fn.call(_this, src);
31
}, result.code));
32