@samitouri / QOS-React-2 / commits / 79561342c3

Build standalone react-addons packages

Paul O’Shannessy committed Jun 20, 2015 at 20:29 UTC 79561342c33fbe00fd623760f8f536d2944c03fc
4 files changed +133
Gruntfile.js
+6
@@ -75,6 +75,10 @@ module.exports = function(grunt) {
75 var npmReactDOMTasks = require('./grunt/tasks/npm-react-dom');
76 grunt.registerTask('npm-react-dom:pack', npmReactDOMTasks.packRelease);
77
78 + var npmReactAddonsTasks = require('./grunt/tasks/npm-react-addons');
79 + grunt.registerTask('npm-react-addons:release', npmReactAddonsTasks.buildReleases);
80 + grunt.registerTask('npm-react-addons:pack', npmReactAddonsTasks.packReleases);
81 +
82 var gemReactSourceTasks = require('./grunt/tasks/gem-react-source');
83 grunt.registerTask('gem-react-source:release', gemReactSourceTasks.buildRelease);
84 grunt.registerTask('gem-react-source:pack', gemReactSourceTasks.packRelease);
@@ -228,6 +232,8 @@ module.exports = function(grunt) {
232 'npm-react-tools:release',
233 'npm-react-tools:pack',
234 'npm-react-dom:pack',
235 + 'npm-react-addons:release',
236 + 'npm-react-addons:pack',
237 'compare_size',
238 ]);
239
grunt/tasks/npm-react-addons.js new
+114
@@ -0,0 +1,114 @@
1 +'use strict';
2 +
3 +var assign = require('object-assign');
4 +var fs = require('fs');
5 +var grunt = require('grunt');
6 +var path = require('path');
7 +
8 +var addons = {
9 + CSSTransitionGroup: {
10 + module: 'ReactCSSTransitionGroup',
11 + name: 'css-transition-group',
12 + },
13 + LinkedStateMixin: {
14 + module: 'LinkedStateMixin',
15 + name: 'linked-state-mixin',
16 + },
17 + PureRenderMixin: {
18 + module: 'ReactComponentWithPureRenderMixin',
19 + name: 'pure-render-mixin',
20 + },
21 + TransitionGroup: {
22 + module: 'ReactTransitionGroup',
23 + name: 'transition-group',
24 + },
25 + batchedUpdates: {
26 + module: 'ReactUpdates',
27 + method: 'batchedUpdates',
28 + name: 'batched-updates',
29 + },
30 + cloneWithProps: {
31 + module: 'cloneWithProps',
32 + name: 'clone-with-props',
33 + },
34 + createFragment: {
35 + module: 'ReactFragment',
36 + method: 'create',
37 + name: 'create-fragment',
38 + },
39 + shallowCompare: {
40 + module: 'shallowCompare',
41 + name: 'shallow-compare',
42 + },
43 + updates: {
44 + module: 'updates',
45 + name: 'updates',
46 + },
47 +};
48 +
49 +function generateSource(info) {
50 + var pieces = [
51 + "module.exports = require('react/lib/",
52 + info.module,
53 + "')",
54 + ];
55 + if (info.method) {
56 + pieces.push('.', info.method);
57 + }
58 + pieces.push(';');
59 + return pieces.join('');
60 +}
61 +
62 +function buildReleases() {
63 + var pkgTemplate = grunt.file.readJSON('./packages/react-addons/package.json');
64 + // var done = this.async();
65 + Object.keys(addons).map(function(k) {
66 + var info = addons[k];
67 + var pkgName = 'react-addons-' + info.name;
68 + var destDir = 'build/packages/' + pkgName;
69 +
70 + var pkgData = assign({}, pkgTemplate);
71 + pkgData.name = pkgName;
72 +
73 + grunt.file.mkdir(destDir);
74 + fs.writeFileSync(path.join(destDir, 'index.js'), generateSource(info));
75 + fs.writeFileSync(path.join(destDir, 'package.json'), JSON.stringify(pkgData, null, 2));
76 +
77 + // TODO: Make a readme. Consider using a template and sticking it in the original source directory. Also, maybe a license, patents file.
78 + });
79 + // done();
80 +}
81 +
82 +function packReleases() {
83 + var done = this.async();
84 + var count = 0;
85 +
86 + var addonKeys = Object.keys(addons);
87 +
88 + addonKeys.forEach(function(k) {
89 + var info = addons[k];
90 + var pkgName = 'react-addons-' + info.name;
91 + var pkgDir = 'build/packages/' + pkgName;
92 +
93 + var spawnCmd = {
94 + cmd: 'npm',
95 + args: ['pack', pkgDir],
96 + };
97 + grunt.util.spawn(spawnCmd, function() {
98 + var buildSrc = pkgName + '-' + grunt.config.data.pkg.version + '.tgz';
99 + var buildDest = 'build/packages/' + pkgName + '.tgz';
100 + fs.rename(buildSrc, buildDest, maybeDone);
101 + });
102 + });
103 +
104 + function maybeDone() {
105 + if (++count === addonKeys.length) {
106 + done();
107 + }
108 + }
109 +}
110 +
111 +module.exports = {
112 + buildReleases: buildReleases,
113 + packReleases: packReleases,
114 +};
grunt/tasks/version-check.js
+4
@@ -10,11 +10,15 @@ var reactVersionExp = /\bReact\.version\s*=\s*['"]([^'"]+)['"];/;
10 module.exports = function() {
11 var pkgVersion = grunt.config.data.pkg.version;
12
13 + var addonsData = grunt.file.readJSON('./packages/react-addons/package.json');
14 var versions = {
15 'packages/react/package.json':
16 grunt.file.readJSON('./packages/react/package.json').version,
17 'packages/react-dom/package.json':
18 grunt.file.readJSON('./packages/react-dom/package.json').version,
19 + 'packages/react-addons/package.json (version)': addonsData.version,
20 + // Get the "version" without the range bit
21 + 'packages/react-addons/package.json (react dependency)': addonsData.peerDependencies.react.slice(1),
22 'src/React.js': reactVersionExp.exec(grunt.file.read('./src/React.js'))[1],
23 };
24
packages/react-addons/package.json new
+9
@@ -0,0 +1,9 @@
1 +{
2 + "name": "react-addons",
3 + "version": "0.14.0-alpha3",
4 + "main": "index.js",
5 + "license": "BSD-3-Clause",
6 + "peerDependencies": {
7 + "react": "^0.14.0-alpha3"
8 + }
9 +}