jarvis-react
Version:
React脚手架及命令行工具合集
94 lines (93 loc) • 3.61 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const fs_extra_1 = __importDefault(require("fs-extra"));
const inquirer_1 = require("inquirer");
const path_1 = require("path");
const child_process_1 = require("child_process");
const command_exists_1 = require("command-exists");
const function_1 = require("../util/function");
const resource_1 = require("./resource");
const ora_1 = __importDefault(require("ora"));
var InitType;
(function (InitType) {
InitType["config"] = "config";
})(InitType || (InitType = {}));
function init(type) {
switch (type) {
case InitType.config:
return initConfig();
default:
function_1.logger.error('init params must be "config"');
process.exit(0);
}
}
module.exports = init;
async function initConfig() {
function_1.logger.cyan('🔨 初始化项目工程规范配置\n');
// 1. 复制项目配置文件
const resourcePath = path_1.join(__dirname, '../../resource/config/');
const projectPath = process.cwd() + '/';
const resources = fs_extra_1.default.readdirSync(resourcePath);
const project = fs_extra_1.default.readdirSync(projectPath);
const deps = [];
for (const file of resources) {
if (project.includes(file)) {
const { cover } = await inquirer_1.prompt([
{
type: 'confirm',
name: 'cover',
message: `当前项目存在 ${file} 文件,是否覆盖?`,
default: true,
},
]);
if (!cover) {
continue;
}
}
const item = resource_1.configurationInfo.get(file);
fs_extra_1.default.copyFileSync(resourcePath + file, projectPath + file);
deps.push(...(item?.needDepend || []));
function_1.logger.success(`写入 ${item?.description}`);
}
function_1.logger.success('全部配置文件写入完成!\n');
// 2. 安装必要依赖项
const pkg = function_1.readProjectPackage();
const allDeps = [...Object.keys({ ...pkg.dependencies, ...pkg.devDependencies })];
const set = [...new Set(deps.filter((item) => !allDeps.includes(item)))].join(' ');
if (set.length > 0) {
function_1.logger.cyan(`需要安装必要依赖项:${set}`);
let cmd = '';
if (command_exists_1.sync('yarn')) {
cmd += 'yarn add -D ';
}
else if (command_exists_1.sync('npm')) {
cmd += 'npm install -D ';
}
else {
throw new Error('当前系统环境没有安装Yarn或Npm工具');
}
const spinner = ora_1.default(`开始安装项目依赖:${cmd + set} \n`);
spinner.start();
child_process_1.execSync(cmd + set);
spinner.succeed('🚀 项目依赖安装成功!\n');
}
// 3. 增加script脚本
const { script } = await inquirer_1.prompt([
{
type: 'confirm',
name: 'script',
message: `是否需要增加script脚本?`,
default: true,
},
]);
if (script) {
const pkg = function_1.readProjectPackage();
Object.assign(pkg.scripts, resource_1.scripts);
fs_extra_1.default.writeFileSync(projectPath + 'package.json', JSON.stringify(pkg, null, 2));
function_1.logger.success('写入scripts脚本成功!\n');
}
// 4. 增加commit hook
}