dev-environment-setup · git:20260904.004eda6 · 2026-09-04 · sha256 aa87222e51bdd704
dev-environment-setup git:20260904.004eda6A
Immutable. This exact content is served forever at /api/v1/blob/aa87222e51bdd704.
---
name: dev-environment-setup
description: 全栈开发环境配置器。用于检测、选择、安装各类开发运行时与性能测试工具,并为新项目生成脚手架代码。当用户提到"创建开发环境"、"初始化项目"、"设置开发栈"、"安装 Python/Node/Go/Java/JMeter/Locust"、"创建后端项目"、"创建前端项目"、"配置全栈环境"、"新建 Django 项目"、"新建 Vue 项目"、"新建 Next.js 项目"、"设置 Java Spring 项目"、"设置 Go Web 项目"、"性能测试环境"、"压测工具安装"、"环境切换"、"dev-env"、"setup env"时触发此技能。即使用户没有明确说"环境"或"脚手架",只要意图涉及搭建新项目的开发环境或技术栈初始化,也应触发此技能。
---
# Dev Environment Setup — 全栈开发环境配置器
## 概览
本 skill 帮助开发者快速配置开发环境并初始化项目脚手架。支持以下技术栈:
| 编号 | 环境 | 用途 | 风险等级 |
|------|------|------|---------|
| 1 | Python 3.12 | 后端运行时 / 压测脚本 / Locust / tidevice | L1 |
| 2 | Node.js 22 LTS | 前端运行时 / npm/pnpm/yarn / Hypium | L1 |
| 3 | Go 1.23 | 后端运行时 / Gin / Fiber | L1 |
| 4 | Java JDK 17 | 后端运行时 / Spring Boot / JMeter 依赖 | L1 |
| 5 | Docker Desktop | 容器化运行环境(Windows 需 WSL2) | L1 |
| 6 | Git | 版本控制 | L0 |
| 7 | SVN | 版本控制(Subversion) | L0 |
| 8 | WSL | Windows 子系统 for Linux(Docker 前置) | L1 |
| 9 | Apache JMeter 5.6.2 | HTTP 性能/压力测试 | L1 |
| 10 | Locust | Python 分布式负载测试 | L1 |
| 11 | Android ADB | Android 设备调试 / APP 自动化测试 | L0 |
| 12 | Huawei HDC | 华为鸿蒙设备调试 | L0 |
| 13 | tidevice | iOS 设备调试(Windows 支持有限,推荐 macOS) | L1 |
| 14 | Hypium | 鸿蒙测试框架(@hmos/hypium) | L1 |
---
## 执行流程
### 阶段1:环境探测
运行 `scripts/setup_env.py`(会先调用 `detect_env.py` 扫描):
```bash
python scripts/setup_env.py
```
探测结果以**逐个环境分行展示**,每项包含编号、名称、状态、版本、路径:
```
============================================================
Dev Environment Detection
============================================================
OS: win32
Drives: C:\
System Drive: C:\
------------------------------------------------------------
Runtime & Tool Status
------------------------------------------------------------
[1] Python [OK] Python 3.14.3 -> C:\Python314\python.exe
后端运行时,支持 Django / FastAPI / 压测脚本
[2] Node.js [OK] v22.16.0 -> C:\nvm4w\nodejs\node.exe
前后端运行时,支持 npm/pnpm/yarn
[3] Go [MISS] 后端运行时,支持 Gin / Fiber
[4] Java [MISS] 后端运行时,支持 Spring Boot / JMeter 依赖
[5] Docker [MISS] 容器化运行环境(需 WSL2)
[6] Git [OK] git version 2.43.0 -> C:\Program Files\Git\cmd\git.exe
版本控制
[7] SVN [MISS] 版本控制(Subversion)
[8] WSL [OK] WSL 2.7.12 -> C:\Windows\System32\wsl.exe
Windows 子系统 for Linux
[9] JMeter [MISS] HTTP 性能/压力测试(需 Java)
[10] Locust [MISS] Python 分布式负载测试(需 Python)
[11] ADB [OK] Android Debug Bridge version 1.0.41
Android 设备调试
[12] HDC [OK] Ver: 3.2.0d
华为鸿蒙设备调试
[13] tidevice [OK] 0.12.11
iOS 设备调试
[14] Hypium [MISS] 鸿蒙测试框架(需 Node.js 18+)
------------------------------------------------------------
Package Manager Status
------------------------------------------------------------
[1] pip [OK] pip 26.2.1
[2] npm [OK] 10.9.2
[3] pnpm [OK] 11.3.0
[4] winget [OK] v1.29.290
...
============================================================
Summary
============================================================
Installed: 7 / 14 (Python, Node.js, Git, WSL, ADB, HDC, tidevice)
Missing: 7 / 14 (Go, Java, Docker, SVN, JMeter, Locust, Hypium)
```
### 阶段2:交互式选择
展示缺失项的**编号列表**(每项单独一行),用户通过编号或名称选择:
```
============================================================
Select environments to install
============================================================
Number | Name | Description
--------+------------+------------------------------------------
3 | Go | 后端运行时,支持 Gin / Fiber
4 | Java | 后端运行时,支持 Spring Boot / JMeter 依赖
5 | Docker | 容器化运行环境(需 WSL2)
7 | SVN | 版本控制(Subversion)
9 | JMeter | HTTP 性能/压力测试(需 Java)
10 | Locust | Python 分布式负载测试(需 Python)
[all] Install all missing environments
[skip] Skip installation, proceed to project scaffold
──────────────────────────────────────────────────────────
```
用户输入方式:
- 单个:`3` 或 `Go`
- 多个:`3, 5, 9` 或 `Go, Docker, JMeter`
- 全部:`all`
- 跳过:`skip`
**依赖自动补齐**:用户选 `9`(JMeter)时自动带 `4`(Java);选 `10`(Locust)时自动带 `1`(Python,若缺失)。
### 阶段3:离线包探测
运行 `scripts/check_packages.py` 检查 `E:\Tools_Package\` 中是否有已缓存的安装包:
```bash
python scripts/check_packages.py Go Java JMeter
```
输出示例:
```
------------------------------------------------------------
Offline Package Check
------------------------------------------------------------
[Go ] [LOCAL ] 152 MB SHA UNKNOWN E:\Tools_Package\Go\go1.23.4.windows-amd64.msi
[Java ] [ONLINE] Will download from official source
[JMeter ] [LOCAL ] 98 MB SHA OK E:\Tools_Package\JMeter\apache-jmeter-5.6.2\apache-jmeter-5.6.2.zip
```
- 有本地包 → 标记 `LOCAL`,跳过在线下载
- 无本地包 → 标记 `ONLINE`,准备从官方源下载
- **禁止从非官方镜像下载**
### 阶段4:安装前强制确认(必须执行,不得跳过)
运行 `scripts/build_plan.py` 生成完整安装计划并展示给用户:
```bash
python scripts/build_plan.py Go Java JMeter --existing detect_result.json
```
计划输出示例:
```
======================================================================
PRE-INSTALLATION CONFIRMATION PLAN
======================================================================
Base install directory: E:\Test_tool_enviroment\
System drive: C:\
Free space: 125,000 MB | Estimated needed: 780 MB (+20% margin) [OK]
----------------------------------------------------------------------
Environment Details
----------------------------------------------------------------------
[Go] [ONLINE]
Source: OFFLINE (official source)
Download URL: https://go.dev/dl/go1.23.4.windows-amd64.msi
Install dir: E:\Test_tool_enviroment\Go\
Est. size: 180 MB (+20% margin)
Risk: L1
Env vars:
GOROOT (Machine) = E:\Test_tool_enviroment\Go
Path (Machine) = E:\Test_tool_enviroment\Go\bin
[Java] [ONLINE]
Source: OFFLINE (official source)
Download URL: https://api.adoptium.net/v3/binary/latest/17/ga/windows/x64/jdk/hotspot/normal/eclipse
Install dir: E:\Test_tool_enviroment\Java\
Est. size: 360 MB (+20% margin)
Risk: L1
Env vars:
JAVA_HOME (Machine) = E:\Test_tool_enviroment\Java
Path (Machine) = E:\Test_tool_enviroment\Java\bin
[JMeter] [LOCAL] (dependency: Java[OK])
Source: LOCAL (E:\Tools_Package\JMeter\)
Install dir: E:\Test_tool_enviroment\JMeter\apache-jmeter-5.6.2\
Est. size: 144 MB (+20% margin)
Risk: L1
Env vars:
Path (Machine) = E:\Test_tool_enviroment\JMeter\apache-jmeter-5.6.2\bin
JMETER_HOME (Machine) = E:\Test_tool_enviroment\JMeter\apache-jmeter-5.6.2\
Network access required: YES
Domains to access: go.dev, api.adoptium.net
======================================================================
CONFIRMATION REQUIRED
======================================================================
The following actions will be performed upon your confirmation:
- Download installers from official sources (Go, Java)
- Verify downloaded files with SHA-256 checksums
- Create directories under: E:\Test_tool_enviroment\
- Modify environment variables (listed above)
- Run installation commands (may require admin/UAC elevation)
- Reopen terminal to apply PATH changes
Type 'confirm' to proceed, or 'cancel' to abort.
```
**规则:**
- 用户明确输入 `confirm` 前不得下载、解压、安装、修改任何环境变量
- **OS 不兼容时 BLOCK**:当前系统不支持该环境时,标记 `[SKIP]` 并说明原因,不纳入安装计划
- **空间不足时 BLOCK**:磁盘剩余空间 < 预估占用(含 20% 余量)时,输出 `BLOCKED` 并询问用户是否指定其他盘符;未获确认前不得自动切换
- 用户输入 `cancel` 输出 `CANCELLED`,流程终止
- 用户确认后,授权本次安装所需的本地文件写入、目录创建、注册表修改和 UAC 提权,不再单独询问
### 阶段5:在线安装包下载与执行
仅在有本地包不可用时才执行下载,且**必须校验完整性**:
```powershell
# 统一下载安装器(内置超时+重试+镜像降级+SHA-256校验)
python scripts/installer.py --tool Python --url "https://..." --dest-dir "%TEMP%\python-installer" --timeout 600
```
**超时配置:**
| 工具类型 | 默认超时 | 说明 |
|---------|---------|------|
| Python / Node.js / Go / Java | 600s | 大文件下载 + MSI 安装 |
| Docker | 1200s | 超大安装包(~2GB) |
| winget / pip / npm | 300s | 包管理器操作 |
| brew / apt | 600s | 系统包管理器 |
| 其他 | 120s | 快速操作 |
**重试机制:**
- 每个镜像源下载失败后**自动重试 3 次**(间隔 5 秒)
- 所有重试耗尽后,**自动切换到下一个镜像源**
- 全部镜像均失败后,标记 `TIMEOUT`,不中断整体流程
- 输出明确的下一步建议(重试命令、手动下载链接)
**国内镜像源(固定优先):**
| 环境 | 主镜像 | 备用1 | 备用2 |
|------|--------|-------|-------|
| Python | `mirrors.huaweicloud.com/python/` | `registry.npmmirror.com/.../python/` | `python.org/ftp/python/` |
| Node.js | `mirrors.huaweicloud.com/nodejs-release/` | `mirrors.tuna.tsinghua.edu.cn/nodejs-release/` | `nodejs.org/dist/` |
| Go | `mirrors.aliyun.com/golang/` | `mirrors.tuna.tsinghua.edu.cn/golang/` | `go.dev/dl/` |
| Java | `mirrors.huaweicloud.com/adoptium/` | `mirrors.tuna.tsinghua.edu.cn/Adoptium/` | `api.adoptium.net/...` |
| JMeter | `mirrors.tuna.tsinghua.edu.cn/apache/jmeter/` | `archive.apache.org/dist/jmeter/` | `downloads.apache.org/jmeter/` |
| Git | `mirrors.huaweicloud.com/git-for-windows/` | `mirrors.tuna.tsinghua.edu.cn/git-for-windows/` | `github.com/git-for-windows/` |
**安装包清理(需用户确认):**
安装成功后,自动提示是否删除临时安装包以释放磁盘空间:
```
Cleanup: Remove 1 downloaded installer(s) to free space?
- C:\Users\EDY\AppData\Local\Temp\python-installer\installer.tmp (245 MB)
Confirm deletion? (y/n): y
[+] Cleaned up 1 installer(s)
```
- 绿色解压类工具(JMeter、SVN、ADB 等):**不产生安装包**,无此步骤
- MSI/EXE 下载类工具:安装完成后询问是否删除临时文件
- 用户选择 `n` 则保留文件,可用于后续手动排查
### 阶段6:环境安装(含环境变量配置 + 超时处理)
按用户确认的计划逐项安装:
**安装优先级:**
1. 已校验的本地包(`E:\Tools_Package\`)→ 解压/复制
2. `winget install`(Windows 首选)→ 静默安装 + 自动配置 PATH
3. `brew install`(macOS 首选)
4. 官方安装器手动安装(用户确认后运行)
**环境变量配置:**
| 环境 | 变量名 | 作用域 | 值 |
|------|--------|--------|---|
| Python | `PYTHON_HOME` | Machine | `E:\Test_tool_enviroment\Python\` |
| Python | `Path` | Machine | 追加 `%PYTHON_HOME%\` + `%PYTHON_HOME%\Scripts\` |
| Go | `GOROOT` | Machine | `E:\Test_tool_enviroment\Go\` |
| Go | `Path` | Machine | 追加 `%GOROOT%\bin\` |
| Java | `JAVA_HOME` | Machine | `E:\Test_tool_enviroment\Java\` |
| Java | `Path` | Machine | 追加 `%JAVA_HOME%\bin\` |
| JMeter | `JMETER_HOME` | Machine | `E:\Test_tool_enviroment\JMeter\apache-jmeter-5.6.2\` |
| JMeter | `Path` | Machine | 追加 `%JMETER_HOME%\bin\` |
| Node.js | `Path` | Machine | 追加安装目录 |
| SVN | `Path` | Machine | 追加 `%INSTALL_DIR%\bin\` |
**配置方式:**
- Windows: 使用 `setx` 设置 Machine 级 PATH;同时设置 `PYTHON_HOME` / `GOROOT` / `JAVA_HOME`
- macOS/Linux: 写入 `~/.zshrc` 或 `~/.bashrc`
> **重要**:如果自动配置失败,必须打印出需要手动添加的路径,不能跳过。
### 阶段7:安装验证
安装完成后重新探测,逐项验证:
```
----------------------------------------------------------------------
Post-Installation Verification
----------------------------------------------------------------------
Go [OK] go version go1.23.4
Java [OK] openjdk version "17.0.11"
JMeter [OK] jmeter -v → Apache JMeter Version 5.6.2
Locust [OK] locust --version → 2.32.0
----------------------------------------------------------------------
```
对验证失败的项目,给出具体排查建议。
### 阶段8:项目脚手架生成
确认环境就绪后,根据用户需求生成项目脚手架:
| 选择 | 脚本 |
|------|------|
| Python Django | `python scripts/scaffold_django.py <项目名>` |
| Python FastAPI | `python scripts/scaffold_fastapi.py <项目名>` |
| Node.js Express | `python scripts/scaffold_node.py <项目名> --framework express` |
| Node.js Next.js | `python scripts/scaffold_node.py <项目名> --framework nextjs` |
| Vue 3 + TypeScript | `python scripts/scaffold_vue.py <项目名>` |
| Go Gin | `python scripts/scaffold_go.py <项目名> --framework gin` |
| Go Fiber | `python scripts/scaffold_go.py <项目名> --framework fiber` |
| Java Spring Boot | `python scripts/scaffold_java.py <项目名>` |
### 阶段9:依赖安装与工具链配置
脚手架生成后,自动安装项目依赖:
**Python 项目:**
```bash
cd <项目目录>
python -m venv .venv
.venv\Scripts\activate
pip install -r requirements.txt
pip install black isort flake8 mypy pre-commit
pre-commit install
```
**Node.js/TypeScript 项目:**
```bash
cd <项目目录>
npm install
npm install -D eslint prettier typescript
npx eslint --init
```
**Go 项目:**
```bash
cd <项目目录>
go mod tidy
go install golang.org/x/tools/gopls@latest
go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest
```
### 阶段10:最终报告
安装完成后,运行 `scripts/report.py` 生成结构化报告:
```bash
python scripts/report.py \
--operation install \
--selected Go Java JMeter Locust \
--completed Go Java JMeter \
--failed Locust \
--failed-reasons "Locust:pip install network timeout" \
--base-dir "E:\Test_tool_enviroment" \
--system-drive "C:\"
```
报告输出示例:
```
======================================================================
INSTALL REPORT
======================================================================
Time: 2026-09-04 14:30:00
Base dir: E:\Test_tool_enviroment
System: C:\
┌─────────────────────────────┐
│ Summary │
├─────────────────────────────┤
│ Requested: 4 │
│ Success: 3 │
│ Failed: 1 │
│ Status: PARTIAL │
└─────────────────────────────┘
Completed: Go, Java, JMeter
Failed: Locust — pip install network timeout
Next Steps:
请重新打开终端以使新环境变量生效
验证命令: python scripts/verify_env.py Go Java JMeter
报告已保存至: reports/report_install_20260904_143000.json
```
---
## 安装后验证
安装完成后,运行 `scripts/verify_env.py` 逐项验证:
```bash
python scripts/verify_env.py Go Java JMeter Locust
```
输出格式:
```
======================================================================
ENVIRONMENT VERIFICATION REPORT
======================================================================
Total checked: 4
PASS: 3
FAIL: 1
MISSING: 0
PASSED
----
[PASS] Go go version go1.23.4
[PASS] Java openjdk version "17.0.11"
[PASS] JMeter Apache JMeter Version 5.6.2
FAILED
----
[FAIL] Locust command not found; env:
```
**规则:**
- 每个环境独立验证,一个失败不影响其他环境的验证结果
- 未安装的环境标记 `MISSING`
- 已安装但验证失败的环境标记 `FAIL`,给出排查建议
---
## 卸载环境
运行 `scripts/uninstall_env.py` 卸载已安装的环境:
```bash
# 卸载单个环境
python scripts/uninstall_env.py Python
# 卸载多个环境
python scripts/uninstall_env.py Go Java
# 仅查看计划,不执行(dry-run)
python scripts/uninstall_env.py Python Go --dry-run
```
卸载前会打印计划,用户确认后执行:
```
======================================================================
UNINSTALL PLAN
======================================================================
[Python] [INSTALLED] — Python 3.14.3 -> C:\Python314\python.exe
Risk: L2
Will remove:
✗ E:\Test_tool_enviroment\Python\
env: PYTHON_HOME (user) → remove
env: Path (user) → remove PATH entries containing 'Python'
Note: 会删除 E:\Test_tool_enviroment\Python\;不会删除系统级 Python
[Go] [INSTALLED] — go version go1.23.4
Risk: L1
Will remove:
✗ E:\Test_tool_enviroment\Go\
env: GOROOT (user) → remove
env: Path (user) → remove PATH entries containing 'Go\bin'
Note: 会删除 E:\Test_tool_enviroment\Go\;不会删除 winget 安装的 Go
Type 'confirm' to proceed, 'cancel' to abort:
```
**卸载范围说明:**
- `E:\Test_tool_enviroment\<工具名>\` 目录下的安装 — 自动删除
- 系统级环境变量(Machine)— 自动清理
- 用户级环境变量(User)— 自动清理
- **不触碰**:winget/apt/brew 安装的系统级工具、其他路径的 Python/Node.js/Go 等
---
## 脚本参考
| 脚本 | 用途 |
|------|------|
| `scripts/setup_env.py` | 主入口:探测 → 选择 → 安装 → 验证 → 报告(含进度条/日志/共存提示) |
| `scripts/detect_env.py` | 环境检测:14个运行时 + OS 兼容性 + 包管理器状态 |
| `scripts/check_packages.py` | 离线包探测与 SHA-256 校验 |
| `scripts/build_plan.py` | 安装前计划生成(动态版本 + 镜像URL + 超时) |
| `scripts/resolve_versions.py` | 版本解析器(最近 5 版本列表 + URL 生成) |
| `scripts/installer.py` | 下载+安装引擎(超时/重试/镜像降级/SHA-256/清理) |
| `scripts/verify_env.py` | 安装后验证(独立检查,不阻塞) |
| `scripts/report.py` | 报告生成(JSON + HTML 双格式) |
| `scripts/uninstall_env.py` | 卸载已安装环境(dry-run + confirm) |
| `scripts/add_new_env.py` | 未知工具添加向导(交互式生成 catalog 条目) |
| `scripts/logging.py` | 会话日志(每会话独立 txt 文件) |
| `scripts/scaffold_*.py` | 6 种项目脚手架生成器 |
---
## 参考文档
- `references/env_catalog.md` — 完整环境编号清单(用途/版本/来源/目录/网络/变量/风险)
- `references/installation-guide.md` — 各运行时详细安装说明
- `references/project-templates.md` — 各技术栈推荐的目录结构
---
## 新增功能说明
### 多环境共存(Python 示例)
本机已有 Python 3.14,安装 Python 3.12 时自动检测并提示:
```
[INFO] Python coexistence detected:
Current: Python 3.14.3 -> C:\Python314\python.exe
Target: 3.12.x -> E:\Test_tool_enviroment\Python\
Note: Use 'py -3.12' to invoke the new Python
Use 'py -3.14' to invoke the current Python
The py launcher handles version selection automatically.
```
- 新安装的 Python 不会覆盖系统 Python
- 使用 `py -3.12` / `py -3.14` 选择版本
- 各工具的 `PYTHON_HOME` 指向独立目录,互不干扰
### 安装日志
每次安装会话自动生成独立日志文件:
```
logs/install_20260904_143000.txt
```
记录内容:时间戳、操作类型、每个环境的安装状态、错误详情、环境变量变更。
### 进度条
安装过程中实时显示进度:
```
[####------------] 3/14 (21%) [OK] Python
[#####-----------] 4/14 (28%) [OK] Node.js
[#######---------] 5/14 (35%) [FAIL] Go — network timeout
[########--------] 6/14 (42%) [OK] Java
```
### 未知工具添加
当用户请求不在 1-14 编号内的工具时,运行交互式向导:
```bash
python scripts/add_new_env.py
```
向导引导用户填写:名称、描述、验证命令、版本列表、镜像源、安装方法、依赖、环境变量、风险等级,输出可直接粘贴到各配置文件的代码片段。