Skip to content
Merged
Show file tree
Hide file tree
Changes from 5 commits
Commits
File filter

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