Skip to content

Commit

Permalink
Added bundle command using ReactPackager
Browse files Browse the repository at this point in the history
Added bundle script
Pipe http response straight to file
Used ReactPackager directly, minor fixes
Added error handling to fs.writeFile
Changed .then to .done
  • Loading branch information
arthuralee committed Apr 21, 2015
1 parent 3e8b41f commit c13646f
Show file tree
Hide file tree
Showing 3 changed files with 74 additions and 3 deletions.
5 changes: 3 additions & 2 deletions Examples/SampleApp/iOS/AppDelegate.m
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,10 @@ - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(
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"];
Expand Down
65 changes: 65 additions & 0 deletions local-cli/bundle.js
Original file line number Diff line number Diff line change
@@ -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);
}
}
}
7 changes: 6 additions & 1 deletion local-cli/cli.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,16 @@
var spawn = require('child_process').spawn;
var path = require('path');
var install = require('./install.js');
var bundle = require('./bundle.js');

function printUsage() {
console.log([
'Usage: react-native <command>',
'',
'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);
}
Expand All @@ -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();
Expand Down

0 comments on commit c13646f

Please sign in to comment.