mirror of
https://github.com/status-im/react-native.git
synced 2025-03-03 19:00:37 +00:00
Clean up cli.js
Reviewed By: frantic Differential Revision: D2546201 fb-gh-sync-id: 214a12213674749e1b7270ccbe90fd3330c9cb1e
This commit is contained in:
parent
b4d4cf4444
commit
5c4bb894bf
150
local-cli/cli.js
150
local-cli/cli.js
@ -12,32 +12,70 @@ var bundle = require('../private-cli/src/bundle/bundle');
|
|||||||
var Config = require('../private-cli/src/util/Config');
|
var Config = require('../private-cli/src/util/Config');
|
||||||
var fs = require('fs');
|
var fs = require('fs');
|
||||||
var generate = require('../private-cli/src/generate/generate');
|
var generate = require('../private-cli/src/generate/generate');
|
||||||
var init = require('./init.js');
|
|
||||||
var library = require('../private-cli/src/library/library');
|
var library = require('../private-cli/src/library/library');
|
||||||
|
var path = require('path');
|
||||||
var runAndroid = require('../private-cli/src/runAndroid/runAndroid');
|
var runAndroid = require('../private-cli/src/runAndroid/runAndroid');
|
||||||
var server = require('../private-cli/src/server/server');
|
var server = require('../private-cli/src/server/server');
|
||||||
|
var TerminalAdapter = require('yeoman-environment/lib/adapter.js');
|
||||||
|
var yeoman = require('yeoman-environment');
|
||||||
|
|
||||||
// TODO: remove once we fully roll out the `private-cli` based cli
|
var availableCommands = {
|
||||||
// var bundle_DEPRECATED = require('./bundle.js');
|
'start': [server, 'starts the webserver'],
|
||||||
// var generateAndroid_DEPRECATED = require('./generate-android.js');
|
'bundle': [bundle, 'builds the javascript bundle for offline use'],
|
||||||
// var newLibrary_DEPRECATED = require('./new-library.js');
|
'new-library': [library, 'generates a native library bridge'],
|
||||||
// var runPackager_DEPRECATED = require('./run-packager.js');
|
'android': [generate, 'generates an Android project for your app'],
|
||||||
// var runAndroid_DEPRECATED = require('./run-android.js');
|
'run-android': [runAndroid, 'builds your app and starts it on a connected Android emulator or device']
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Parses the command line and runs a command of the CLI.
|
||||||
|
*/
|
||||||
|
function run() {
|
||||||
|
var args = process.argv.slice(2);
|
||||||
|
if (args.length === 0) {
|
||||||
|
printUsage();
|
||||||
|
}
|
||||||
|
|
||||||
|
var config = Config.get(__dirname);
|
||||||
|
switch (args[0]) {
|
||||||
|
case 'start': return server(args, config).done();
|
||||||
|
case 'bundle': return bundle(args, config).done();
|
||||||
|
case 'new-library': return library(args, config).done();
|
||||||
|
case 'init': return printInitWarning();
|
||||||
|
case 'run-android': return runAndroid(args, config).done();
|
||||||
|
case 'android':
|
||||||
|
generate(
|
||||||
|
[
|
||||||
|
'--platform', 'android',
|
||||||
|
'--project-path', process.cwd(),
|
||||||
|
'--project-name', JSON.parse(
|
||||||
|
fs.readFileSync('package.json', 'utf8')
|
||||||
|
).name
|
||||||
|
],
|
||||||
|
config
|
||||||
|
).done();
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
console.error('Command `%s` unrecognized', args[0]);
|
||||||
|
printUsage();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function printUsage() {
|
function printUsage() {
|
||||||
console.log([
|
console.log([
|
||||||
'Usage: react-native <command>',
|
'Usage: react-native <command>',
|
||||||
'',
|
'',
|
||||||
'Commands:',
|
'Commands:'
|
||||||
' start: starts the webserver',
|
].concat(
|
||||||
' bundle: builds the javascript bundle for offline use',
|
Object.keys(availableCommands).map(function(name){
|
||||||
' new-library: generates a native library bridge',
|
return name + ':\t' + availableCommands[name][1];
|
||||||
' android: generates an Android project for your app',
|
}).join('\n')
|
||||||
' run-android: builds your app and starts it on a connected Android emulator or device'
|
));
|
||||||
].join('\n'));
|
|
||||||
process.exit(1);
|
process.exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// The user should never get here because projects are inited by
|
||||||
|
// using `react-native-cli` from outside a project directory.
|
||||||
function printInitWarning() {
|
function printInitWarning() {
|
||||||
console.log([
|
console.log([
|
||||||
'Looks like React Native project already exists in the current',
|
'Looks like React Native project already exists in the current',
|
||||||
@ -46,58 +84,44 @@ function printInitWarning() {
|
|||||||
process.exit(1);
|
process.exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
function run() {
|
class CreateSuppressingTerminalAdapter extends TerminalAdapter {
|
||||||
var args = process.argv.slice(2);
|
constructor() {
|
||||||
if (args.length === 0) {
|
super();
|
||||||
printUsage();
|
// suppres 'create' output generated by yeoman
|
||||||
|
this.log.create = function() {};
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
var config = Config.get(__dirname);
|
/**
|
||||||
|
* Creates the template for a React Native project given the provided
|
||||||
|
* parameters:
|
||||||
|
* - projectDir: templates will be copied here.
|
||||||
|
* - argsOrName: project name or full list of custom arguments to pass to the
|
||||||
|
* generator.
|
||||||
|
*/
|
||||||
|
function init(projectDir, argsOrName) {
|
||||||
|
console.log('Setting up new React Native app in ' + projectDir);
|
||||||
|
var env = yeoman.createEnv(
|
||||||
|
undefined,
|
||||||
|
undefined,
|
||||||
|
new CreateSuppressingTerminalAdapter()
|
||||||
|
);
|
||||||
|
|
||||||
switch (args[0]) {
|
env.register(
|
||||||
case 'start':
|
require.resolve(path.join(__dirname, 'generator')),
|
||||||
server(args, config).done();
|
'react:app'
|
||||||
// runPackager_DEPRECATED();
|
);
|
||||||
break;
|
|
||||||
case 'bundle':
|
// argv is for instance
|
||||||
bundle(args, config).done();
|
// ['node', 'react-native', 'init', 'AwesomeApp', '--verbose']
|
||||||
// bundle_DEPRECATED.init(args);
|
// args should be ['AwesomeApp', '--verbose']
|
||||||
break;
|
var args = Array.isArray(argsOrName)
|
||||||
case 'new-library':
|
? argsOrName
|
||||||
library(args, config).done();
|
: [argsOrName].concat(process.argv.slice(4));
|
||||||
// newLibrary_DEPRECATED.init(args);
|
|
||||||
break;
|
var generator = env.create('react:app', {args: args});
|
||||||
case 'init':
|
generator.destinationRoot(projectDir);
|
||||||
printInitWarning();
|
generator.run();
|
||||||
break;
|
|
||||||
case 'android':
|
|
||||||
generate(
|
|
||||||
[
|
|
||||||
'--platform', 'android',
|
|
||||||
'--project-path', process.cwd(),
|
|
||||||
'--project-name', JSON.parse(
|
|
||||||
fs.readFileSync('package.json', 'utf8')
|
|
||||||
).name
|
|
||||||
],
|
|
||||||
config
|
|
||||||
).done();
|
|
||||||
// generateAndroid(
|
|
||||||
// process.cwd(),
|
|
||||||
// JSON.parse(fs.readFileSync('package.json', 'utf8')).name
|
|
||||||
// );
|
|
||||||
break;
|
|
||||||
case 'run-android':
|
|
||||||
runAndroid(args, config).done();
|
|
||||||
// runAndroid_DEPRECATED(); default:
|
|
||||||
break;
|
|
||||||
case 'help':
|
|
||||||
printUsage();
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
console.error('Command `%s` unrecognized', args[0]);
|
|
||||||
printUsage();
|
|
||||||
}
|
|
||||||
// Here goes any cli commands we need to
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (require.main === module) {
|
if (require.main === module) {
|
||||||
|
@ -1,41 +0,0 @@
|
|||||||
/**
|
|
||||||
* Copyright (c) 2015-present, Facebook, Inc.
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* This source code is licensed under the BSD-style license found in the
|
|
||||||
* LICENSE file in the root directory of this source tree. An additional grant
|
|
||||||
* of patent rights can be found in the PATENTS file in the same directory.
|
|
||||||
*/
|
|
||||||
'use strict';
|
|
||||||
|
|
||||||
var path = require('path');
|
|
||||||
var yeoman = require('yeoman-environment');
|
|
||||||
var TerminalAdapter = require('yeoman-environment/lib/adapter.js');
|
|
||||||
|
|
||||||
class CreateSuppressingTerminalAdapter extends TerminalAdapter {
|
|
||||||
constructor() {
|
|
||||||
super();
|
|
||||||
// suppres 'create' output generated by yeoman
|
|
||||||
this.log.create = function() {};
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// argsOrName can be:
|
|
||||||
// - A string (e.g. 'AwesomeApp'). This is the common case when
|
|
||||||
// you run 'react-native init AwesomeApp' from the command line.
|
|
||||||
// - An array with all the arguments. This can be useful when you
|
|
||||||
// need to pass custom arguments to the generator.
|
|
||||||
function init(projectDir, argsOrName) {
|
|
||||||
console.log('Setting up new React Native app in ' + projectDir);
|
|
||||||
var env = yeoman.createEnv(undefined, undefined, new CreateSuppressingTerminalAdapter());
|
|
||||||
env.register(require.resolve(path.join(__dirname, 'generator')), 'react:app');
|
|
||||||
// argv is e.g.
|
|
||||||
// ['node', 'react-native', 'init', 'AwesomeApp', '--verbose']
|
|
||||||
// args is ['AwesomeApp', '--verbose']
|
|
||||||
var args = Array.isArray(argsOrName) ? argsOrName : [argsOrName].concat(process.argv.slice(4));
|
|
||||||
var generator = env.create('react:app', {args: args});
|
|
||||||
generator.destinationRoot(projectDir);
|
|
||||||
generator.run();
|
|
||||||
}
|
|
||||||
|
|
||||||
module.exports = init;
|
|
Loading…
x
Reference in New Issue
Block a user