Files
create-react-app/scripts/init.js
2016-07-18 15:17:59 -07:00

78 lines
2.6 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* 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.
*/
var fs = require('fs');
var path = require('path');
var spawn = require('cross-spawn');
module.exports = function(hostPath, appName, verbose) {
var selfPath = path.join(hostPath, 'node_modules', 'react-scripts');
var hostPackage = require(path.join(hostPath, 'package.json'));
var selfPackage = require(path.join(selfPath, 'package.json'));
// Copy over devDependencies
hostPackage.dependencies = hostPackage.dependencies || {};
for (var key in selfPackage.devDependencies) {
hostPackage.dependencies[key] = selfPackage.devDependencies[key];
}
// Setup the script rules
hostPackage.scripts = {};
['start', 'build', 'eject'].forEach(function(command) {
hostPackage.scripts[command] =
command + '-react-app';
});
fs.writeFileSync(
path.join(hostPath, 'package.json'),
JSON.stringify(hostPackage, null, 2)
);
// Copy the files for the user
function copySync(src, dest) {
return fs.writeFileSync(dest, fs.readFileSync(src));
}
fs.mkdirSync(path.join(hostPath, 'src'));
fs.readdirSync(path.join(selfPath, 'src')).forEach(function(filename) {
copySync(
path.join(selfPath, 'src', filename),
path.join(hostPath, 'src', filename)
);
});
copySync(path.join(selfPath, 'index.html'), path.join(hostPath, 'index.html'));
// Run another npm install for react and react-dom
// TODO: having to do two npm installs is bad, can we avoid it?
var args = [
'install',
verbose && '--verbose'
].filter(function(e) { return e; });
var proc = spawn('npm', args, {stdio: 'inherit'});
proc.on('close', function (code) {
if (code !== 0) {
console.error('`npm ' + args.join(' ') + '` failed');
return;
}
console.log('Success! Created ' + appName + ' at ' + hostPath + '.');
console.log();
console.log('Inside that directory, you can run several commands:');
console.log(' * npm start: Starts the development server.');
console.log(' * npm run build: Builds the app for production.');
console.log(' * npm run eject: Removes this tool. If you do this, you cant go back!');
console.log();
console.log('We suggest that you begin by typing:');
console.log(' cd', appName);
console.log(' npm start');
console.log();
console.log('Happy hacking!');
});
};