UNPKG

jarvis-react

Version:

React脚手架及命令行工具合集

94 lines (93 loc) 3.61 kB
"use strict"; 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 }