Added bundle command using ReactPackager

Added bundle script
Pipe http response straight to file
Used ReactPackager directly, minor fixes
Added error handling to fs.writeFile
Changed .then to .done
This commit is contained in:
Arthur Lee 2015-04-14 20:19:58 -04:00
parent 3e8b41f5b1
commit c13646fce1
3 changed files with 74 additions and 3 deletions

View File

@ -29,9 +29,10 @@
jsCodeLocation = [NSURL URLWithString:@"http://localhost:8081/Examples/SampleApp/index.ios.bundle"];
// OPTION 2
// Load from pre-bundled file on disk. To re-generate the static bundle, run
// Load from pre-bundled file on disk. To re-generate the static bundle,
// from the root of your project directory, run
//
// $ curl 'http://localhost:8081/Examples/SampleApp/index.ios.bundle?dev=false&minify=true' -o iOS/main.jsbundle
// $ react-native bundle
//
// and uncomment the next following line
// jsCodeLocation = [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"];

65
local-cli/bundle.js Normal file
View File

@ -0,0 +1,65 @@
var http = require('http');
var fs = require('fs');
var path = require('path');
var chalk = require('chalk');
var blacklist = require('../packager/blacklist.js');
var ReactPackager = require('../packager/react-packager');
var OUT_PATH = 'iOS/main.jsbundle';
function getBundle(flags) {
var options = {
projectRoots: [path.resolve(__dirname, '../../..')],
transformModulePath: require.resolve('../packager/transformer.js'),
assetRoots: [path.resolve(__dirname, '../../..')],
cacheVersion: '2',
blacklistRE: blacklist('ios')
};
var url = '/index.ios.bundle?dev=' + flags.dev;
console.log('Building package...');
ReactPackager.buildPackageFromUrl(options, url)
.done(function(bundle) {
console.log('Build complete');
fs.writeFile(OUT_PATH, bundle.getSource({
inlineSourceMap: false,
minify: flags.minify
}), function(err) {
if (err) {
console.log(chalk.red('Error saving bundle to disk'));
throw err;
} else {
console.log('Successfully saved bundle to ' + OUT_PATH);
}
});
});
}
function showHelp() {
console.log([
'Usage: react-native bundle [options]',
'',
'Options:',
' --dev\t\tsets DEV flag to true',
' --minify\tminify js bundle'
].join('\n'));
process.exit(1);
}
module.exports = {
init: function(args) {
var flags = {
help: args.indexOf('--help') !== -1,
dev: args.indexOf('--dev') !== -1,
minify: args.indexOf('--minify') !== -1
}
if (flags.help) {
showHelp();
} else {
getBundle(flags);
}
}
}

View File

@ -7,6 +7,7 @@
var spawn = require('child_process').spawn;
var path = require('path');
var install = require('./install.js');
var bundle = require('./bundle.js');
function printUsage() {
console.log([
@ -14,7 +15,8 @@ function printUsage() {
'',
'Commands:',
' start: starts the webserver',
' install: installs npm react components'
' install: installs npm react components',
' bundle: builds the javascript bundle for offline use'
].join('\n'));
process.exit(1);
}
@ -36,6 +38,9 @@ function run() {
case 'install':
install.init();
break;
case 'bundle':
bundle.init(args);
break;
default:
console.error('Command `%s` unrecognized', args[0]);
printUsage();