ly-express-cli
Version:
96 lines (76 loc) • 3.65 kB
JavaScript
import { fileURLToPath } from 'url'
import path from 'path'
import { program } from 'commander'
import inquirer from 'inquirer'
import fs from 'fs-extra'
import chalk from 'chalk'
import { execSync } from 'child_process'
import { createPackageJson } from './package.json.js'
const __filename = fileURLToPath(import.meta.url)
const __dirname = path.dirname(__filename)
const pkg = fs.readJsonSync(path.resolve(__dirname, '../package.json'))
// 指定版本和描述信息
program
.version(pkg.version)
.description('用于创建 Express + TypeScript 接口项目')
// 初始化一个 Express + TypeScript 项目
program.command('init')
.description("初始化一个 Express + TypeScript 项目")
.action(async () => {
// 交互式提问
const { projectName, installDeps } = await inquirer.prompt([
{ type: 'input', name: 'projectName', message: '项目名称:' },
{ type: 'confirm', name: 'installDeps', message: '是否安装依赖?', default: true }
])
if (!projectName) {
console.log(chalk.red('❌ 项目名称不能为空!'))
return
}
// 项目路径
const projectPath = path.join(process.cwd(), projectName)
// 目录存在
if (fs.existsSync(projectPath)) {
const { ifReplaceDir } = await inquirer.prompt([
{ type: 'confirm', name: 'ifReplaceDir', message: '目录已存在,是否覆盖创建?', default: true }
])
if (!ifReplaceDir) {
console.log(chalk.red('❌ 目录已存在无法创建'))
return
}
await fs.promises.rm(projectPath, { recursive: true, force: true })
console.log(chalk.green(`✅ 已将目录删除!`))
}
// 创建项目目录
console.log(chalk.green(`🚀 正在创建项目:${projectName}...`))
fs.mkdirSync(projectPath)
// 创建项目文件
fs.copySync(path.join(__dirname, 'templates'), path.join(projectPath))
fs.writeFileSync(path.join(projectPath, 'package.json'), createPackageJson(projectName))
// 如果用户选择安装依赖
if (installDeps) {
console.log(chalk.blue(`🔧 安装依赖:`))
try {
execSync('npm install', { stdio: 'inherit', cwd: projectPath })
console.log(chalk.green(`✅ 依赖安装成功!`))
} catch (error) {
console.log(chalk.red(`❌ 依赖安装失败: ${error.message}`))
}
}
// 提示成功
console.log(chalk.green('✅ 项目创建成功!'))
// 提示用户下一步操作
console.log(chalk.blue(`💻 进入项目目录:`))
console.log(chalk.cyan(`cd ${projectName}`)) // 提示用户进入项目目录
if (!installDeps) {
console.log(chalk.blue(`🔧 安装依赖:`))
console.log(chalk.cyan(`npm install`)) // 提示用户运行 `npm install`
}
console.log(chalk.blue(`🚀 启动开发环境:`))
console.log(chalk.cyan(`npm run dev`)) // 提示用户启动开发环境
console.log(chalk.blue(`⚙️ 打包项目:`))
console.log(chalk.cyan(`npm run build`)) // 提示用户运行 `npm run build`
console.log(chalk.blue(`🚀 启动生产环境:`))
console.log(chalk.cyan(`npm start`)) // 提示用户启动生产环境
})
program.parse(process.argv)