Skip to content

Commit

Permalink
Creating a new app in the current directory (facebook#368)
Browse files Browse the repository at this point in the history
* Creating a new app in the current directory

* Fixed style mistakes
  • Loading branch information
torifat authored and George Czabania committed Sep 7, 2016
1 parent 46b0234 commit 7fbbdd5
Show file tree
Hide file tree
Showing 4 changed files with 43 additions and 7 deletions.
24 changes: 18 additions & 6 deletions global-cli/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ 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:
Expand All @@ -67,21 +68,20 @@ if (commands.length === 0) {
createApp(commands[0], argv.verbose, argv['scripts-version']);

function createApp(name, verbose, version) {
if (fs.existsSync(name)) {
console.log('The directory `' + name + '` already exists. Aborting.');
var root = path.resolve(name);
if (!pathExists.sync(name)) {
fs.mkdirSync(root);
} else if (!isGitHubBoilerplate(root)) {
console.log('The directory `' + name + '` contains file(s) that could conflict. Aborting.');
process.exit(1);
}

var root = path.resolve(name);
var appName = path.basename(root);

console.log(
'Creating a new React app in ' + root + '.'
);
console.log();

fs.mkdirSync(root);

var packageJson = {
name: appName,
version: '0.0.1',
Expand Down Expand Up @@ -166,3 +166,15 @@ function checkNodeVersion() {
process.exit(1);
}
}

// Check if GitHub boilerplate compatible
// https://github.com/facebookincubator/create-react-app/pull/368#issuecomment-237875655
function isGitHubBoilerplate(root) {
var validFiles = [
'.DS_Store', 'Thumbs.db', '.git', '.gitignore', 'README.md', 'LICENSE'
];
return fs.readdirSync(root)
.every(function(file) {
return validFiles.indexOf(file) >= 0;
});
}
1 change: 1 addition & 0 deletions global-cli/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
"chalk": "^1.1.1",
"cross-spawn": "^4.0.0",
"minimist": "^1.2.0",
"path-exists": "^3.0.0",
"semver": "^5.0.3"
}
}
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@
"jest": "14.1.0",
"json-loader": "0.5.4",
"opn": "4.0.2",
"path-exists": "^3.0.0",
"postcss-loader": "0.9.1",
"promise": "7.1.1",
"recursive-readdir": "2.0.0",
Expand Down
24 changes: 23 additions & 1 deletion scripts/init.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@
var fs = require('fs-extra');
var path = require('path');
var spawn = require('cross-spawn');
var pathExists = require('path-exists');
var chalk = require('chalk');

module.exports = function(appPath, appName, verbose, originalDirectory) {
var ownPath = path.join(appPath, 'node_modules', 'react-scripts');
Expand Down Expand Up @@ -43,12 +45,28 @@ module.exports = function(appPath, appName, verbose, originalDirectory) {
JSON.stringify(appPackage, null, 2)
);

var readmeExists = pathExists.sync(path.join(appPath, 'README.md'));
if (readmeExists) {
fs.renameSync(path.join(appPath, 'README.md'), path.join(appPath, 'README.old.md'));
}

// Copy the files for the user
fs.copySync(path.join(ownPath, 'template'), appPath);

// Rename gitignore after the fact to prevent npm from renaming it to .npmignore
// See: https://github.com/npm/npm/issues/1862
fs.move(path.join(appPath, 'gitignore'), path.join(appPath, '.gitignore'), []);
fs.move(path.join(appPath, 'gitignore'), path.join(appPath, '.gitignore'), [], function (err) {
if (err) {
// Append if there's already a `.gitignore` file there
if (err.code === 'EEXIST') {
var data = fs.readFileSync(path.join(appPath, 'gitignore'));
fs.appendFileSync(path.join(appPath, '.gitignore'), data);
fs.unlinkSync(path.join(appPath, 'gitignore'));
} else {
throw err;
}
}
});

// Run another npm install for react and react-dom
console.log('Installing react and react-dom from npm...');
Expand Down Expand Up @@ -88,6 +106,10 @@ module.exports = function(appPath, appName, verbose, originalDirectory) {
console.log();
console.log(' cd', cdpath);
console.log(' npm start');
if (readmeExists) {
console.log();
console.log(chalk.yellow('You had a `README.md` file, we renamed it to `README.old.md`'));
}
console.log();
console.log('Happy hacking!');
});
Expand Down

0 comments on commit 7fbbdd5

Please sign in to comment.