@burnish/cli
Version:
a cli for creating vue / react / flutter projects
127 lines (126 loc) • 5.7 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const Ora_1 = __importDefault(require("Ora"));
const fs_extra_1 = __importDefault(require("fs-extra"));
const chalk_1 = __importDefault(require("chalk"));
const figlet_1 = __importDefault(require("figlet"));
const inquirer_1 = __importDefault(require("inquirer"));
const log_symbols_1 = __importDefault(require("log-symbols"));
const child_process_1 = __importDefault(require("child_process"));
const utils_1 = require("../../utils");
const value_1 = __importDefault(require("../../value"));
const createReactApp = (projectName, targetDir) => __awaiter(void 0, void 0, void 0, function* () {
const { author, description, version, package_manager } = yield inquirer_1.default.prompt([
{
type: 'input',
name: 'description',
message: 'Please input your project description',
default: 'description',
validate(val) {
return true;
}
},
{
type: 'input',
name: 'author',
message: 'Please input your author name',
default: 'author',
validate(val) {
return true;
},
transformer(val) {
return val;
}
},
{
type: 'input',
name: 'version',
message: 'Please input project version',
default: '1.0.0',
validate(val) {
return true;
},
transformer(val) {
return val;
}
},
{
type: 'list',
name: 'package_manager',
message: 'Which package manager do you want to use',
default: 'Yarn',
choices: ['Yarn', 'Npm'],
validate(val) {
return true;
}
}
]);
// 一些提示 ···
console.log(chalk_1.default.white(`\n\n✨ Creating project in ${chalk_1.default.yellow(targetDir)}.`));
console.log(chalk_1.default.white(`\n🗃 Initializing git repository....\n`));
const spinner = Ora_1.default({
text: `Download template from burnish git repository... This might take a while....\n`
});
spinner.start();
utils_1.downloadFromGithub(value_1.default.REACT, projectName)
.then((res) => {
fs_extra_1.default.readFile(`./${projectName}/package.json`, 'utf8', function (err, data) {
if (err) {
spinner.stop();
console.error(err);
return;
}
const packageJson = JSON.parse(data);
packageJson.name = projectName;
packageJson.description = description;
packageJson.author = author;
packageJson.version = version;
var updatePackageJson = JSON.stringify(packageJson, null, 2);
fs_extra_1.default.writeFile(`./${projectName}/package.json`, updatePackageJson, 'utf8', function (err) {
spinner.stop();
if (err) {
console.error(err);
}
else {
console.log(chalk_1.default.white(`📦 Installing additional dependencies...\n`));
// 将node工作目录更改成构建的项目根目录下
process.chdir(`./${projectName}`);
// 安装项目依赖
if (package_manager === 'Yarn') {
child_process_1.default.execSync('yarn', { stdio: [0, 1] });
}
else {
child_process_1.default.execSync('npm install', { stdio: [0] });
}
// 依赖安装完成之后给出提示信息
console.log(chalk_1.default.white(`\n🎉 Successfully created project`), chalk_1.default.yellow(`${projectName}.`));
console.log(chalk_1.default.white('👉 Get started with the following commands:\n'));
console.log(`${chalk_1.default.cyan(`${chalk_1.default.gray('$')} cd ${projectName}`)}`);
console.log(package_manager === 'Yarn'
? chalk_1.default.cyan(`${chalk_1.default.gray('$')} yarn start\n\n`)
: chalk_1.default.cyan(`${chalk_1.default.gray('$')} npm run start\n\n`));
console.log(chalk_1.default.white(figlet_1.default.textSync('burnish-cli')));
}
process.exit();
});
});
})
.catch((err) => {
console.log(log_symbols_1.default.error, err);
spinner.fail(chalk_1.default.red('Sorry, it must be something error,please check it out. \n'));
process.exit(-1);
});
});
exports.default = createReactApp;