Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Use "commander" for cli argv handling #1195

Merged
merged 6 commits into from
Dec 11, 2016
Merged
Show file tree
Hide file tree
Changes from 5 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
language: node_js
node_js:
- 0.10
- 4
- 6
cache:
Expand Down
53 changes: 31 additions & 22 deletions packages/create-react-app/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -38,37 +38,46 @@

'use strict';

var chalk = require('chalk');

var currentNodeVersion = process.versions.node
if (currentNodeVersion.split('.')[0] < 4) {
console.error(chalk.red('You are currently running Node v' + currentNodeVersion +
' but create-react-app requires >=4. Please use a supported version of Node.\n'));
process.exit(1);
}

var fs = require('fs');
var path = require('path');
var spawn = require('cross-spawn');
var chalk = require('chalk');
var semver = require('semver');
var argv = require('minimist')(process.argv.slice(2));
var pathExists = require('path-exists');

/**
* Arguments:
* --version - to print current version
* --verbose - to print logs while init
* --scripts-version <alternative package>
* Example of valid values:
* - a specific npm version: "0.22.0-rc1"
* - a .tgz archive from any npm repo: "https://registry.npmjs.org/react-scripts/-/react-scripts-0.20.0.tgz"
* - a package prepared with `tasks/clean_pack.sh`: "/Users/home/vjeux/create-react-app/react-scripts-0.22.0.tgz"
*/
var commands = argv._;
if (commands.length === 0) {
if (argv.version) {
console.log('create-react-app version: ' + require('./package.json').version);
process.exit();
}
console.error(
'Usage: create-react-app <project-directory> [--verbose]'
);
var projectName;

var program = require('commander')
.version(require('./package.json').version)
.arguments('<name>')
.action(function (name) {
projectName = name;
})
.option('-v, --verbose', 'print logs while init')
.option('-s, --scripts-version <alternative package>', 'select a react script variant')
.on('--help', function () {
console.log('Example of valid script version values:')
console.log(' - a specific npm version: "0.22.0-rc1"')
console.log(' - a .tgz archive from any npm repo: "https://registry.npmjs.org/react-scripts/-/react-scripts-0.20.0.tgz"')
console.log(' - a package prepared with `tasks/clean_pack.sh`: "/Users/home/vjeux/create-react-app/react-scripts-0.22.0.tgz"')
})
.parse(process.argv)

if (typeof projectName === 'undefined') {
console.error('Error: no name given!');
console.log('Usage: ' + program.name() + ' ' + program.usage());
process.exit(1);
}

createApp(commands[0], argv.verbose, argv['scripts-version']);
createApp(projectName, program.verbose, program.scriptsVersion);

function createApp(name, verbose, version) {
var root = path.resolve(name);
Expand Down
2 changes: 1 addition & 1 deletion packages/create-react-app/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,8 @@
},
"dependencies": {
"chalk": "^1.1.1",
"commander": "^2.9.0",
"cross-spawn": "^4.0.0",
"minimist": "^1.2.0",
"path-exists": "^2.1.0",
"semver": "^5.0.3"
}
Expand Down
20 changes: 14 additions & 6 deletions tasks/e2e.sh
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,11 @@
# Start in tasks/ even if run from root directory
cd "$(dirname "$0")"

# CLI and app temporary locations
# http://unix.stackexchange.com/a/84980
temp_cli_path=`mktemp -d 2>/dev/null || mktemp -d -t 'temp_cli_path'`
temp_app_path=`mktemp -d 2>/dev/null || mktemp -d -t 'temp_app_path'`

function cleanup {
echo 'Cleaning up.'
cd $root_path
Expand Down Expand Up @@ -53,15 +58,22 @@ set -x
cd ..
root_path=$PWD

npm install

# If the node version is < 4, the script should just give an error.
if [ `node --version | sed -e 's/^v//' -e 's/\..\+//g'` -lt 4 ]
then
cd $temp_app_path
node "$root_path"/packages/create-react-app/index.js test-node-version && exit 1 || exit 0
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We should verify that it prints a nice message instead of failing with e.g. a parse error.

fi

if [ "$USE_YARN" = "yes" ]
then
# Install Yarn so that the test can use it to install packages.
npm install -g yarn@0.17.10 # TODO: remove version when https://github.com/yarnpkg/yarn/issues/2142 is fixed.
yarn cache clean
fi

npm install

# Lint own code
./node_modules/.bin/eslint --ignore-path .gitignore ./

Expand Down Expand Up @@ -117,13 +129,10 @@ mv package.json.orig package.json
# ******************************************************************************

# Install the CLI in a temporary location
# http://unix.stackexchange.com/a/84980
temp_cli_path=`mktemp -d 2>/dev/null || mktemp -d -t 'temp_cli_path'`
cd $temp_cli_path
npm install $cli_path

# Install the app in a temporary location
temp_app_path=`mktemp -d 2>/dev/null || mktemp -d -t 'temp_app_path'`
cd $temp_app_path
create_react_app --scripts-version=$scripts_path test-app

Expand Down Expand Up @@ -185,7 +194,6 @@ npm test -- --watch=no
# Test the server
npm start -- --smoke-test


# ******************************************************************************
# Test --scripts-version with a version number
# ******************************************************************************
Expand Down