Merge pull request #4273 from spicyj/addons

Finish addons packaging
This commit is contained in:
Ben Alpert
2015-07-02 23:39:04 +02:00
19 changed files with 144 additions and 14 deletions
+6
View File
@@ -75,6 +75,10 @@ module.exports = function(grunt) {
var npmReactDOMTasks = require('./grunt/tasks/npm-react-dom');
grunt.registerTask('npm-react-dom:pack', npmReactDOMTasks.packRelease);
var npmReactAddonsTasks = require('./grunt/tasks/npm-react-addons');
grunt.registerTask('npm-react-addons:release', npmReactAddonsTasks.buildReleases);
grunt.registerTask('npm-react-addons:pack', npmReactAddonsTasks.packReleases);
var gemReactSourceTasks = require('./grunt/tasks/gem-react-source');
grunt.registerTask('gem-react-source:release', gemReactSourceTasks.buildRelease);
grunt.registerTask('gem-react-source:pack', gemReactSourceTasks.packRelease);
@@ -228,6 +232,8 @@ module.exports = function(grunt) {
'npm-react-tools:release',
'npm-react-tools:pack',
'npm-react-dom:pack',
'npm-react-addons:release',
'npm-react-addons:pack',
'compare_size',
]);
+117
View File
@@ -0,0 +1,117 @@
'use strict';
var assign = require('object-assign');
var fs = require('fs');
var grunt = require('grunt');
var path = require('path');
var addons = {
CSSTransitionGroup: {
module: 'ReactCSSTransitionGroup',
name: 'css-transition-group',
},
LinkedStateMixin: {
module: 'LinkedStateMixin',
name: 'linked-state-mixin',
},
PureRenderMixin: {
module: 'ReactComponentWithPureRenderMixin',
name: 'pure-render-mixin',
},
TransitionGroup: {
module: 'ReactTransitionGroup',
name: 'transition-group',
},
cloneWithProps: {
module: 'cloneWithProps',
name: 'clone-with-props',
},
createFragment: {
module: 'ReactFragment',
method: 'create',
name: 'create-fragment',
},
shallowCompare: {
module: 'shallowCompare',
name: 'shallow-compare',
},
updates: {
module: 'updates',
name: 'updates',
},
};
function generateSource(info) {
var pieces = [
"module.exports = require('react/lib/",
info.module,
"')",
];
if (info.method) {
pieces.push('.', info.method);
}
pieces.push(';');
return pieces.join('');
}
function buildReleases() {
var pkgTemplate = grunt.file.readJSON('./packages/react-addons/package.json');
var license = grunt.file.read('./LICENSE');
var patents = grunt.file.read('./PATENTS');
Object.keys(addons).map(function(k) {
var info = addons[k];
var pkgName = 'react-addons-' + info.name;
var destDir = 'build/packages/' + pkgName;
var pkgData = assign({}, pkgTemplate);
pkgData.name = pkgName;
grunt.file.mkdir(destDir);
fs.writeFileSync(path.join(destDir, 'index.js'), generateSource(info));
fs.writeFileSync(path.join(destDir, 'package.json'), JSON.stringify(pkgData, null, 2));
fs.writeFileSync(path.join(destDir, 'LICENSE'), license);
fs.writeFileSync(path.join(destDir, 'PATENTS'), patents);
fs.writeFileSync(
path.join(destDir, 'README.md'),
'# ' + pkgName + '\n\n' +
'This package provides the React ' + k + ' add-on. See ' +
'http://facebook.github.io/react/docs/addons.html for more information.\n'
);
});
}
function packReleases() {
var done = this.async();
var count = 0;
var addonKeys = Object.keys(addons);
addonKeys.forEach(function(k) {
var info = addons[k];
var pkgName = 'react-addons-' + info.name;
var pkgDir = 'build/packages/' + pkgName;
var spawnCmd = {
cmd: 'npm',
args: ['pack', pkgDir],
};
grunt.util.spawn(spawnCmd, function() {
var buildSrc = pkgName + '-' + grunt.config.data.pkg.version + '.tgz';
var buildDest = 'build/packages/' + pkgName + '.tgz';
fs.rename(buildSrc, buildDest, maybeDone);
});
});
function maybeDone() {
if (++count === addonKeys.length) {
done();
}
}
}
module.exports = {
buildReleases: buildReleases,
packReleases: packReleases,
};
+4
View File
@@ -10,11 +10,15 @@ var reactVersionExp = /\bReact\.version\s*=\s*['"]([^'"]+)['"];/;
module.exports = function() {
var pkgVersion = grunt.config.data.pkg.version;
var addonsData = grunt.file.readJSON('./packages/react-addons/package.json');
var versions = {
'packages/react/package.json':
grunt.file.readJSON('./packages/react/package.json').version,
'packages/react-dom/package.json':
grunt.file.readJSON('./packages/react-dom/package.json').version,
'packages/react-addons/package.json (version)': addonsData.version,
// Get the "version" without the range bit
'packages/react-addons/package.json (react dependency)': addonsData.peerDependencies.react.slice(1),
'src/React.js': reactVersionExp.exec(grunt.file.read('./src/React.js'))[1],
};
+1
View File
@@ -53,6 +53,7 @@
"gzip-js": "~0.3.2",
"jasmine-tapreporter": "~0.2.2",
"jest-cli": "^0.4.13",
"object-assign": "^3.0.0",
"optimist": "^0.6.1",
"phantomjs": "^1.9.17",
"platform": "^1.1.0",
+9
View File
@@ -0,0 +1,9 @@
{
"name": "react-addons",
"version": "0.14.0-alpha3",
"main": "index.js",
"license": "BSD-3-Clause",
"peerDependencies": {
"react": "^0.14.0-alpha3"
}
}
+1 -1
View File
@@ -2,7 +2,7 @@ var warning = require('./lib/warning');
warning(
false,
"require('react/addons') is deprecated. " +
"Access using require('react/addons/{addon}') instead."
"Access using require('react-addons-{addon}') instead."
);
module.exports = require('./lib/ReactWithAddons');
@@ -1 +0,0 @@
module.exports = require('../lib/ReactCSSTransitionGroup');
@@ -1 +0,0 @@
module.exports = require('../lib/LinkedStateMixin');
-1
View File
@@ -1 +0,0 @@
module.exports = require('../lib/ReactDefaultPerf');
-1
View File
@@ -1 +0,0 @@
module.exports = require('../lib/ReactComponentWithPureRenderMixin');
-1
View File
@@ -1 +0,0 @@
module.exports = require('../lib/ReactTestUtils');
-1
View File
@@ -1 +0,0 @@
module.exports = require('../lib/ReactTransitionGroup');
-1
View File
@@ -1 +0,0 @@
module.exports = require('../lib/ReactUpdates').batchedUpdates;
-1
View File
@@ -1 +0,0 @@
module.exports = require('../lib/cloneWithProps');
-1
View File
@@ -1 +0,0 @@
module.exports = require('../lib/ReactFragment').create;
@@ -1 +0,0 @@
module.exports = require('../lib/renderSubtreeIntoContainer');
-1
View File
@@ -1 +0,0 @@
module.exports = require('../lib/shallowCompare');
-1
View File
@@ -1 +0,0 @@
module.exports = require('../lib/update');
+6 -1
View File
@@ -20,6 +20,7 @@ var ReactInstanceHandles = require('ReactInstanceHandles');
var ReactMount = require('ReactMount');
var ReactPerf = require('ReactPerf');
var ReactReconciler = require('ReactReconciler');
var ReactUpdates = require('ReactUpdates');
var findDOMNode = require('findDOMNode');
var renderSubtreeIntoContainer = require('renderSubtreeIntoContainer');
@@ -33,7 +34,11 @@ var React = {
findDOMNode: findDOMNode,
render: render,
unmountComponentAtNode: ReactMount.unmountComponentAtNode,
_renderSubtreeIntoContainer: renderSubtreeIntoContainer,
/* eslint-disable camelcase */
unstable_batchedUpdates: ReactUpdates.batchedUpdates,
unstable_renderSubtreeIntoContainer: renderSubtreeIntoContainer,
/* eslint-enable camelcase */
};
// Inject the runtime into a devtools global hook regardless of browser.