From 36697ae6a125481b5b2c63db1547f6d2dd3bb6ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mart=C3=ADn=20Bigio?= Date: Thu, 15 Oct 2015 10:19:21 -0700 Subject: [PATCH] Move android generator to private-cli MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Summary: @​public Lets also make this more generic to allow to generate the template for any platform code. Reviewed By: @vjeux Differential Revision: D2536821 fb-gh-sync-id: 6fb99c6dc546b8e1f9839c96a473dc08b0f5285c --- local-cli/cli.js | 29 +++++++++---- private-cli/src/generate/generate.js | 63 ++++++++++++++++++++++++++++ 2 files changed, 85 insertions(+), 7 deletions(-) create mode 100644 private-cli/src/generate/generate.js diff --git a/local-cli/cli.js b/local-cli/cli.js index 35106f6e54e..799c6656b29 100644 --- a/local-cli/cli.js +++ b/local-cli/cli.js @@ -5,15 +5,18 @@ 'use strict'; var bundle = require('../private-cli/src/bundle/bundle'); -var bundle_DEPRECATED = require('./bundle.js'); var Config = require('../private-cli/src/util/Config'); var fs = require('fs'); -var generateAndroid = require('./generate-android.js'); +var generate = require('../private-cli/src/generate/generate'); var init = require('./init.js'); var newLibrary = require('./new-library.js'); var runAndroid = require('./run-android.js'); var runPackager = require('./run-packager.js'); +// TODO: remove once we fully roll out the `private-cli` based cli +// var bundle_DEPRECATED = require('./bundle.js'); +// var generateAndroid_DEPRECATED = require('./generate-android.js'); + function printUsage() { console.log([ 'Usage: react-native ', @@ -41,12 +44,14 @@ function run() { printUsage(); } + var config = Config.get(__dirname); + switch (args[0]) { case 'start': runPackager(); break; case 'bundle': - bundle(args, Config.get(__dirname)).done(); + bundle(args, config).done(); // bundle_DEPRECATED.init(args); break; case 'new-library': @@ -56,10 +61,20 @@ function run() { printInitWarning(); break; case 'android': - generateAndroid( - process.cwd(), - JSON.parse(fs.readFileSync('package.json', 'utf8')).name - ); + 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(); diff --git a/private-cli/src/generate/generate.js b/private-cli/src/generate/generate.js new file mode 100644 index 00000000000..c6a2bf07974 --- /dev/null +++ b/private-cli/src/generate/generate.js @@ -0,0 +1,63 @@ +/** + * 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'; + +const parseCommandLine = require('../../../packager/parseCommandLine'); +const path = require('path'); +const Promise = require('promise'); +const yeoman = require('yeoman-environment'); + +/** + * Generates the template for the given platform. + */ +function generate(argv, config) { + return new Promise((resolve, reject) => { + _generate(argv, config, resolve, reject); + }); +} + +function _generate(argv, config, resolve, reject) { + const args = parseCommandLine([{ + command: 'platform', + description: 'Platform (ios|android)', + type: 'string', + required: true, + }, + { + command: 'project-path', + description: 'Path to the project directory', + type: 'string', + required: true, + }, + { + command: 'project-name', + description: 'Name of the project', + type: 'string', + required: true, + }], argv); + + const oldCwd = process.cwd(); + process.chdir(args['project-path']); + + const env = yeoman.createEnv(); + env.register(path.join(__dirname, '../../../local-cli/generator'), 'react:app'); + env.run( + ['react:app', args['project-name']], + { + 'skip-ios': args.platform !== 'ios', + 'skip-android': args.platform !== 'android' + }, + () => { + process.chdir(oldCwd); + resolve(); + } + ); +} + +module.exports = generate;