From 9162cb8abe8b1e48ca454cfddcceebd25ccc3dbd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Paul=20O=E2=80=99Shannessy?= Date: Tue, 22 Oct 2013 17:59:24 -0700 Subject: [PATCH] react-core npm module --- Gruntfile.js | 26 ++++++++++++++++---- grunt/tasks/react-core.js | 47 +++++++++++++++++++++++++++++++++++++ npm-react-core/README.md | 21 +++++++++++++++++ npm-react-core/addons.js | 1 + npm-react-core/package.json | 29 +++++++++++++++++++++++ npm-react-core/react.js | 1 + 6 files changed, 121 insertions(+), 4 deletions(-) create mode 100644 grunt/tasks/react-core.js create mode 100644 npm-react-core/README.md create mode 100644 npm-react-core/addons.js create mode 100644 npm-react-core/package.json create mode 100644 npm-react-core/react.js diff --git a/Gruntfile.js b/Gruntfile.js index b4013a8e66..87208c011c 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -9,6 +9,7 @@ var webdriverJasmineTasks = require('./grunt/tasks/webdriver-jasmine'); var sauceTunnelTask = require('./grunt/tasks/sauce-tunnel'); var npmTask = require('./grunt/tasks/npm'); var releaseTasks = require('./grunt/tasks/release'); +var reactCoreTasks = require('./grunt/tasks/react-core'); module.exports = function(grunt) { @@ -51,17 +52,33 @@ module.exports = function(grunt) { grunt.registerMultiTask('npm', npmTask); + grunt.registerTask('react-core:release', reactCoreTasks.buildRelease); + // Check that the version we're exporting is the same one we expect in the // package. This is not an ideal way to do this, but makes sure that we keep // them in sync. var reactVersionExp = /\bReact\.version\s*=\s*['"]([^'"]+)['"];/; grunt.registerTask('version-check', function() { - var version = reactVersionExp.exec( + var reactVersion = reactVersionExp.exec( grunt.file.read('./build/modules/React.js') )[1]; - var expectedVersion = grunt.config.data.pkg.version; - if (version !== expectedVersion) { - grunt.log.error('Versions do not match. Expected %s, saw %s', expectedVersion, version); + var reactCoreVersion = grunt.file.readJSON('./npm-react-core/package.json').version; + var reactToolsVersion = grunt.config.data.pkg.version; + + if (reactVersion !== reactToolsVersion) { + grunt.log.error( + 'React version does not match react-tools version. Expected %s, saw %s', + reactToolsVersion, + reactVersion + ); + return false; + } + if (reactCoreVersion !== reactToolsVersion) { + grunt.log.error( + 'react-core version does not match react-tools veersion. Expected %s, saw %s', + reactToolsVersion, + reactCoreVersion + ); return false; } }); @@ -81,6 +98,7 @@ module.exports = function(grunt) { 'version-check', 'populist:test' ]); + grunt.registerTask('build:react-core', ['version-check', 'jsx:release', 'react-core:release']); grunt.registerTask('webdriver-phantomjs', webdriverPhantomJSTask); diff --git a/grunt/tasks/react-core.js b/grunt/tasks/react-core.js new file mode 100644 index 0000000000..e9abe3b269 --- /dev/null +++ b/grunt/tasks/react-core.js @@ -0,0 +1,47 @@ +'use strict'; + +var grunt = require('grunt'); + +var src = 'npm-react-core/'; +var dest = 'build/react-core/'; +var modSrc = 'build/modules/'; +var lib = dest + 'lib/'; + +function buildRelease() { + // delete build/react-core for fresh start + grunt.file.exists(dest) && grunt.file.delete(dest); + + // mkdir -p build/react-core/lib + grunt.file.mkdir(lib); + + // Copy everything over + // console.log(grunt.file.expandMapping(src + '**/*', dest, {flatten: true})); + grunt.file.expandMapping(src + '**/*', dest, {flatten: true}).forEach(function(mapping) { + var src = mapping.src[0]; + var dest = mapping.dest; + if (grunt.file.isDir(src)) { + grunt.file.mkdir(dest); + } else { + grunt.file.copy(src, dest); + } + }); + + // copy build/modules/*.js to build/react-core/lib + grunt.file.expandMapping(modSrc + '*.js', lib, { flatten: true }).forEach(function(mapping) { + grunt.file.copy(mapping.src[0], mapping.dest); + }); + + // modify build/react-core/package.json to set version ## + var pkg = grunt.file.readJSON(dest + 'package.json'); + pkg.version = grunt.config.data.pkg.version; + grunt.file.write(dest + 'package.json', JSON.stringify(pkg, null, 2)); +} + +function buildDev() { + // TODO: same as above except different destination +} + +module.exports = { + buildRelease: buildRelease, + buildDev: buildDev +}; diff --git a/npm-react-core/README.md b/npm-react-core/README.md new file mode 100644 index 0000000000..bca768865a --- /dev/null +++ b/npm-react-core/README.md @@ -0,0 +1,21 @@ +# react-core + +An npm package to get you immediate access to `React`, without also requiring +the JSX transformer. This is especially useful for cases where you want to +[`browserify`](https://github.com/substack/node-browserify) your module using +`React`. + +## Example Usage + +```js + +// Previously, you might access React with react-tools. +var React = require('react-tools').React; + +// Now you can access React directly with react-core. +var React = require('react-core'); + +// You can also access ReactWithAddons. +var React = require('react-core/addons'); +``` + diff --git a/npm-react-core/addons.js b/npm-react-core/addons.js new file mode 100644 index 0000000000..21c5f83950 --- /dev/null +++ b/npm-react-core/addons.js @@ -0,0 +1 @@ +module.exports = require('./lib/ReactWithAddons'); diff --git a/npm-react-core/package.json b/npm-react-core/package.json new file mode 100644 index 0000000000..f64840868b --- /dev/null +++ b/npm-react-core/package.json @@ -0,0 +1,29 @@ +{ + "name": "react-core", + "version": "0.6.0-alpha", + "keywords": [ + "react" + ], + "homepage": "https://github.com/facebook/react/tree/master/npm-react-core", + "bugs": "https://github.com/facebook/react/issues?labels=react-core", + "licenses": [ + { + "type": "Apache-2.0", + "url": "http://www.apache.org/licenses/LICENSE-2.0" + } + ], + "files": [ + "README.md", + "addons.js", + "react.js", + "lib/" + ], + "main": "react.js", + "repository": { + "type": "git", + "url": "https://github.com/facebook/react" + }, + "engines": { + "node": ">=0.10.0" + } +} diff --git a/npm-react-core/react.js b/npm-react-core/react.js new file mode 100644 index 0000000000..08da025716 --- /dev/null +++ b/npm-react-core/react.js @@ -0,0 +1 @@ +module.exports = require('./lib/React');