mirror of
https://github.com/zhigang1992/create-react-app.git
synced 2026-04-02 22:37:39 +08:00
102 lines
3.0 KiB
JavaScript
102 lines
3.0 KiB
JavaScript
/**
|
|
* 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 rl = require('readline');
|
|
var rimrafSync = require('rimraf').sync;
|
|
var spawnSync = require('child_process').spawnSync;
|
|
|
|
var prompt = function(question, cb) {
|
|
var rlInterface = rl.createInterface({
|
|
input: process.stdin,
|
|
output: process.stdout,
|
|
});
|
|
rlInterface.question(question + '\n', function(answer) {
|
|
rlInterface.close();
|
|
cb(answer);
|
|
})
|
|
}
|
|
|
|
prompt('Are you sure you want to eject? This action is permanent. [Y/n]', function(answer) {
|
|
if (answer && answer !== 'Y' && answer !== 'yes') {
|
|
console.log('Close one! Eject aported.');
|
|
process.exit(1);
|
|
}
|
|
|
|
console.log('Ejecting...');
|
|
console.log();
|
|
var selfPath = path.join(__dirname, '..');
|
|
var hostPath = path.join(selfPath, '..', '..');
|
|
|
|
var files = [
|
|
'scripts',
|
|
'webpack.config.dev.js',
|
|
'webpack.config.prod.js',
|
|
'.eslintrc'
|
|
];
|
|
|
|
// Ensure that the host folder is clean and we won't override any files
|
|
files.forEach(function(file) {
|
|
if (fs.existsSync(path.join(hostPath, file))) {
|
|
console.error(
|
|
'`' + file + '` already exists in your app folder. We cannot ' +
|
|
'continue as you would lose all the changes in that file or directory. ' +
|
|
'Please delete it (maybe make a copy for backup) and run this ' +
|
|
'command again.'
|
|
);
|
|
process.exit(1);
|
|
}
|
|
});
|
|
|
|
// Move the files over
|
|
files.forEach(function(file) {
|
|
console.log('Moving ' + file + ' to ' + hostPath);
|
|
fs.renameSync(path.join(selfPath, file), path.join(hostPath, file));
|
|
});
|
|
|
|
// These are unnecessary after graduation
|
|
fs.unlinkSync(path.join(hostPath, 'scripts', 'init.js'));
|
|
fs.unlinkSync(path.join(hostPath, 'scripts', 'eject.js'));
|
|
|
|
console.log();
|
|
|
|
var selfPackage = require(path.join(selfPath, 'package.json'));
|
|
var hostPackage = require(path.join(hostPath, 'package.json'));
|
|
|
|
console.log('Removing dependency: create-react-app-scripts');
|
|
delete hostPackage.devDependencies['create-react-app-scripts'];
|
|
|
|
Object.keys(selfPackage.dependencies).forEach(function (key) {
|
|
console.log('Adding dependency: ' + key);
|
|
hostPackage.devDependencies[key] = selfPackage.dependencies[key];
|
|
});
|
|
|
|
console.log('Updating scripts');
|
|
Object.keys(hostPackage.scripts).forEach(function (key) {
|
|
hostPackage.scripts[key] = 'node ./scripts/' + key + '.js'
|
|
});
|
|
delete hostPackage.scripts['eject'];
|
|
|
|
console.log('Writing package.json');
|
|
fs.writeFileSync(
|
|
path.join(hostPath, 'package.json'),
|
|
JSON.stringify(hostPackage, null, 2)
|
|
);
|
|
console.log();
|
|
|
|
console.log('Running npm install...');
|
|
rimrafSync(selfPath);
|
|
spawnSync('npm', ['install'], {stdio: 'inherit'});
|
|
console.log();
|
|
|
|
console.log('Done!');
|
|
|
|
});
|