From d2cff9557d0f6b9ddd8b20b24829ea78abe8d056 Mon Sep 17 00:00:00 2001 From: Enoah Netzach Date: Wed, 7 Dec 2016 16:43:24 +0100 Subject: [PATCH 1/6] Use "commander" for cli argv handling --- packages/create-react-app/index.js | 42 +++++++++----------------- packages/create-react-app/package.json | 2 +- 2 files changed, 15 insertions(+), 29 deletions(-) diff --git a/packages/create-react-app/index.js b/packages/create-react-app/index.js index 23d8b5e8de..6595a754fa 100644 --- a/packages/create-react-app/index.js +++ b/packages/create-react-app/index.js @@ -30,7 +30,7 @@ // tell people to update their global version of create-react-app. // // Also be careful with new language features. -// This file must work on Node 0.10+. +// This file must work on Node 4+. // // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // /!\ DO NOT MODIFY THIS FILE /!\ @@ -43,32 +43,21 @@ 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 - * 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 [--verbose]' - ); - process.exit(1); -} +var program = require('commander') + .version(require('./package.json').version) + .option('-v, --verbose', 'to print logs while init') + .option('-s, --scripts-version ', 'to select a react script variant [react-scripts]', 'react-scripts') + .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) -createApp(commands[0], argv.verbose, argv['scripts-version']); +createApp(program.args[0], program.verbose, program.scriptsVersion); function createApp(name, verbose, version) { var root = path.resolve(name); @@ -167,13 +156,10 @@ function run(root, appName, version, verbose, originalDirectory) { } function getInstallPackage(version) { - var packageToInstall = 'react-scripts'; + var packageToInstall = version; var validSemver = semver.valid(version); if (validSemver) { packageToInstall += '@' + validSemver; - } else if (version) { - // for tar.gz or alternative paths - packageToInstall = version; } return packageToInstall; } diff --git a/packages/create-react-app/package.json b/packages/create-react-app/package.json index b10b06b899..3d58b3f1d0 100644 --- a/packages/create-react-app/package.json +++ b/packages/create-react-app/package.json @@ -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" } From cf334bc9e509b6c6a29520ae533e0c43c3effb23 Mon Sep 17 00:00:00 2001 From: Enoah Netzach Date: Wed, 7 Dec 2016 17:20:29 +0100 Subject: [PATCH 2/6] Handle different scripts version forms and exits without a name given --- packages/create-react-app/index.js | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/packages/create-react-app/index.js b/packages/create-react-app/index.js index 6595a754fa..e70d2e8892 100644 --- a/packages/create-react-app/index.js +++ b/packages/create-react-app/index.js @@ -45,10 +45,16 @@ var chalk = require('chalk'); var semver = require('semver'); var pathExists = require('path-exists'); +var projectName; + var program = require('commander') .version(require('./package.json').version) - .option('-v, --verbose', 'to print logs while init') - .option('-s, --scripts-version ', 'to select a react script variant [react-scripts]', 'react-scripts') + .arguments('') + .action(function (name) { + projectName = name; + }) + .option('-v, --verbose', 'print logs while init') + .option('-s, --scripts-version ', '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"') @@ -57,7 +63,13 @@ var program = require('commander') }) .parse(process.argv) -createApp(program.args[0], program.verbose, program.scriptsVersion); +if (typeof projectName === 'undefined') { + console.error('Error: no name given!'); + console.log('Usage: ' + program.name() + ' ' + program.usage()); + process.exit(1); +} + +createApp(projectName, program.verbose, program.scriptsVersion); function createApp(name, verbose, version) { var root = path.resolve(name); @@ -156,10 +168,13 @@ function run(root, appName, version, verbose, originalDirectory) { } function getInstallPackage(version) { - var packageToInstall = version; + var packageToInstall = 'react-scripts'; var validSemver = semver.valid(version); if (validSemver) { packageToInstall += '@' + validSemver; + } else if (version) { + // for tar.gz or alternative paths + packageToInstall = version; } return packageToInstall; } From fa110df97d357a3a48bf3ae519a88e3354dcbe40 Mon Sep 17 00:00:00 2001 From: Enoah Netzach Date: Thu, 8 Dec 2016 19:11:55 +0100 Subject: [PATCH 3/6] Revert comment about min supported node version --- packages/create-react-app/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/create-react-app/index.js b/packages/create-react-app/index.js index e70d2e8892..10bf7755d1 100644 --- a/packages/create-react-app/index.js +++ b/packages/create-react-app/index.js @@ -30,7 +30,7 @@ // tell people to update their global version of create-react-app. // // Also be careful with new language features. -// This file must work on Node 4+. +// This file must work on Node 0.10+. // // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // /!\ DO NOT MODIFY THIS FILE /!\ From 352ea72e820e0bfca240d309c2aca2d22eddaa42 Mon Sep 17 00:00:00 2001 From: Enoah Netzach Date: Sat, 10 Dec 2016 10:50:01 +0100 Subject: [PATCH 4/6] Check sooner for the minimal node version --- packages/create-react-app/index.js | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/packages/create-react-app/index.js b/packages/create-react-app/index.js index 10bf7755d1..d334924c53 100644 --- a/packages/create-react-app/index.js +++ b/packages/create-react-app/index.js @@ -38,10 +38,18 @@ '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 pathExists = require('path-exists'); From de41e41feedb8ec1b9de326dfd90ec54add29f4f Mon Sep 17 00:00:00 2001 From: Enoah Netzach Date: Sat, 10 Dec 2016 13:50:08 +0100 Subject: [PATCH 5/6] Add travis test for node <4 --- .travis.yml | 1 + tasks/e2e.sh | 20 ++++++++++++++------ 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/.travis.yml b/.travis.yml index ec44c3294d..bb9c811208 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,6 +1,7 @@ --- language: node_js node_js: + - 0.10 - 4 - 6 cache: diff --git a/tasks/e2e.sh b/tasks/e2e.sh index ce7b50f35b..7011e7e757 100755 --- a/tasks/e2e.sh +++ b/tasks/e2e.sh @@ -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 @@ -53,6 +58,15 @@ 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 +fi + if [ "$USE_YARN" = "yes" ] then # Install Yarn so that the test can use it to install packages. @@ -60,8 +74,6 @@ then yarn cache clean fi -npm install - # Lint own code ./node_modules/.bin/eslint --ignore-path .gitignore ./ @@ -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 @@ -185,7 +194,6 @@ npm test -- --watch=no # Test the server npm start -- --smoke-test - # ****************************************************************************** # Test --scripts-version with a version number # ****************************************************************************** From 9f8e1115e38dc01ddc97f31c8da5c50c1b465298 Mon Sep 17 00:00:00 2001 From: Enoah Netzach Date: Sat, 10 Dec 2016 20:29:02 +0100 Subject: [PATCH 6/6] Parse stderr in node versions <4 --- tasks/e2e.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tasks/e2e.sh b/tasks/e2e.sh index 7011e7e757..c4f4a4b1b8 100755 --- a/tasks/e2e.sh +++ b/tasks/e2e.sh @@ -64,7 +64,8 @@ npm install 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 + err_output=`node "$root_path"/packages/create-react-app/index.js test-node-version 2>&1 > /dev/null || echo ''` + [[ $err_output =~ You\ are\ currently\ running\ Node\ v.+\ but\ create-react-app\ requires\ \>=4\. ]] && exit 0 || exit 1 fi if [ "$USE_YARN" = "yes" ]