UNPKG

@conecli/cone-cli

Version:

松果编辑器命令行工具

106 lines (94 loc) 2.61 kB
/* * @Description: * @Author: cdtangxiejun * @version: * @Date: 2024-09-04 09:37:48 * @LastEditors: cdtangxiejun * @LastEditTime: 2024-09-20 09:46:42 */ 'use strict' const shell = require('shelljs') const { homedir } = require('os') const fs = require('fs-extra') const path = require('path') const chalk = require('chalk') const config = require('../configs/conecli.json') const { TEMPLATE_DIR } = require('../utils/const') const logger = require('../utils/logger') const packageConfig = require('../package.json') const { downloadRepoByConfig, copySync } = require('../utils/util') const inquirer = require('inquirer') const mkdirp = require('mkdirp') const { checkProjectName, hasGit } = require('../utils/env') const generate = require('../utils/generate') async function run(toDir, projectName) { // 是否必须git 待验证 if (!hasGit()) { logger.fatal(`${packageConfig.name} requires git, please install it.`) } // 下载cone-app-template模板 const templateTmp = path.join(homedir(), TEMPLATE_DIR, 'cone-app-template') await downloadRepoByConfig( 'cone-app-template', config['cone-app-template'], templateTmp ).catch((err) => { logger.fatal(err.message) }) // render template files const templatePath = templateTmp const data = { projectName } await generate(templatePath, toDir, data, [ 'cone-module/**', 'cone-service/**', 'caddy/**', 'nginx/**', 'build/**', 'node_modules/**', ]) shell.cd(projectName) shell.touch('.cone') logger.success(chalk.green('cone env initialize completed')) } /** * 初始化编辑器壳子工程 * @param {*} projectName * @returns */ module.exports = async function initProjectAction(projectName) { //工程位置是否替换当前文件夹目录,当没有给工程名时,认为需要替换 const inPlace = !projectName || projectName === '.' const name = inPlace ? path.relative('../', process.cwd()) : projectName // 工程目标位置 const toDir = path.resolve(projectName || '.') checkProjectName(name) // 如果存在,询问是否替换 if (fs.existsSync(toDir)) { const answers = await inquirer .prompt([ { type: 'confirm', message: inPlace ? 'Generate project in current directory?' : 'Target directory exists. Continue?', name: 'ok', }, ]) .catch(logger.fatal) if (answers.ok) { await run(toDir, name) } } else { const made = mkdirp.sync(toDir) if (made) { await run(toDir, name) } else { logger.fatal(`create target directory ${toDir} failed`) } } return { destDir: toDir, inPlace, destDirName: name, } }