Files
QuickStack/frontend/vue.py
2026-02-14 00:46:04 +08:00

114 lines
3.5 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# -*- coding: utf-8 -*-
"""
Vue 项目初始化模块
"""
import subprocess
import sys
def run_command_interactive(cmd, cwd, description):
"""运行命令并支持用户交互"""
print(f"\n{'=' * 60}")
print(f"执行: {description}")
print(f"{'=' * 60}")
print(f"💡 提示: 此步骤需要您进行交互操作")
print(f"{'=' * 60}\n")
try:
result = subprocess.run(cmd, cwd=cwd, shell=True)
print(f"\n{'=' * 60}")
if result.returncode == 0:
print(f"{description} - 完成")
else:
print(f"{description} - 失败 (错误码: {result.returncode})")
print(f"{'=' * 60}\n")
return result.returncode == 0
except Exception as e:
print(f"\n❌ 执行失败: {str(e)}")
return False
def run_command_with_progress(cmd, cwd, description):
"""运行命令并显示实时输出"""
try:
print(f"\n{'=' * 60}")
print(f"执行: {description}")
print(f"{'=' * 60}")
process = subprocess.Popen(
cmd,
cwd=cwd,
shell=True,
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT,
bufsize=0
)
for line in process.stdout:
try:
decoded_line = line.decode('utf-8', errors='replace')
except:
try:
decoded_line = line.decode('gbk', errors='replace')
except:
decoded_line = line.decode('latin-1', errors='replace')
print(decoded_line, end='')
process.wait()
if process.returncode == 0:
print(f"\n{'=' * 60}")
print(f"{description} - 完成")
print(f"{'=' * 60}\n")
return True
else:
print(f"\n{'=' * 60}")
print(f"{description} - 失败 (错误码: {process.returncode})")
print(f"{'=' * 60}\n")
return False
except Exception as e:
print(f"\n❌ 执行失败: {str(e)}")
return False
def init_vue_project(frontend_dir, project_name):
"""初始化 Vue 项目"""
print("\n🚀 初始化 Vue 项目...")
print("\n⚠️ 重要提示:")
print(" 1. 当询问 'Use rolldown-vite?' 时,建议选择 No")
print(" 2. 当询问 'Install and start now?' 时,请选择 No否则会启动服务器")
print(" 3. 我们会在之后单独安装依赖\n")
# 删除空目录
frontend_dir.rmdir()
# 使用 Vite 创建 Vue 项目
cmd = f'npm create vite@latest {frontend_dir.name} -- --template vue'
success = run_command_interactive(cmd, frontend_dir.parent, "创建 Vue 项目结构")
if not success:
print("\n💡 提示: 请确保已安装 Node.js 和 npm")
print(" 下载地址: https://nodejs.org/")
sys.exit(1)
# 检查目录是否创建成功
if not frontend_dir.exists():
print("❌ 项目目录创建失败")
sys.exit(1)
# 检查是否已安装依赖
node_modules = frontend_dir / "node_modules"
if not node_modules.exists():
print("\n⏳ 开始安装依赖...")
success = run_command_with_progress("npm install", frontend_dir, "安装 Vue 项目依赖")
if not success:
print("⚠️ 依赖安装失败,请稍后手动运行: cd {}-frontend && npm install".format(project_name))
print("\n✅ Vue 项目初始化成功")