fnva 0.0.4 → 0.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +328 -94
- package/bin/fnva.js +62 -0
- package/package.json +2 -4
- package/platforms/fnva +0 -0
- package/platforms/fnva.exe +0 -0
- package/platforms/skip.txt +1 -0
package/README.md
CHANGED
|
@@ -1,87 +1,141 @@
|
|
|
1
|
-
#
|
|
1
|
+
# fnva - Fast Environment Version Alter
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
跨平台环境管理工具,支持 Java、LLM 和 Claude Code 环境,具有默认环境设置和自动加载功能。
|
|
4
4
|
|
|
5
5
|
## 功能特性
|
|
6
6
|
|
|
7
7
|
- ✅ **Java 环境管理**:快速切换不同版本的 JDK
|
|
8
8
|
- ✅ **LLM 环境管理**:支持多 LLM 提供商配置切换
|
|
9
|
+
- ✅ **Claude Code (CC) 环境管理**:专门为 Claude Code 设计的环境切换
|
|
10
|
+
- ✅ **默认环境支持**:支持设置默认环境
|
|
11
|
+
- ✅ **自动加载**:新 Shell 会话自动加载默认环境
|
|
12
|
+
- ✅ **智能扫描**:高效扫描系统 Java 安装,支持自定义路径
|
|
9
13
|
- ✅ **跨平台支持**:Windows、macOS、Linux
|
|
10
14
|
- ✅ **多 Shell 支持**:bash、zsh、fish、PowerShell、CMD
|
|
11
|
-
- ✅
|
|
12
|
-
- ✅
|
|
15
|
+
- ✅ **配置化扫描**:支持配置文件和环境变量自定义扫描路径
|
|
16
|
+
- ✅ **高效去重**:智能去除重复的环境条目
|
|
13
17
|
|
|
14
18
|
## 安装
|
|
15
19
|
|
|
16
|
-
###
|
|
20
|
+
### 方式一:通过 npm 安装(推荐)
|
|
17
21
|
|
|
18
22
|
```bash
|
|
19
23
|
# 全局安装
|
|
20
24
|
npm install -g fnva
|
|
21
25
|
|
|
22
|
-
#
|
|
26
|
+
# 使用 yarn
|
|
23
27
|
yarn global add fnva
|
|
24
28
|
|
|
25
|
-
#
|
|
29
|
+
# 使用 pnpm
|
|
26
30
|
pnpm add -g fnva
|
|
27
31
|
```
|
|
28
32
|
|
|
29
|
-
|
|
33
|
+
### 方式二:从 Releases 下载二进制文件
|
|
30
34
|
|
|
31
|
-
|
|
35
|
+
1. 访问 [GitHub Releases](https://github.com/your-repo/fnva/releases)
|
|
36
|
+
2. 下载对应平台的二进制文件:
|
|
37
|
+
- Windows: `fnva-win32-x64.exe`
|
|
38
|
+
- macOS: `fnva-darwin-x64` 或 `fnva-darwin-arm64`
|
|
39
|
+
- Linux: `fnva-linux-x64`
|
|
32
40
|
|
|
33
|
-
|
|
41
|
+
3. 将二进制文件重命名为 `fnva`(Windows 下为 `fnva.exe`)
|
|
42
|
+
|
|
43
|
+
4. 添加到 PATH 环境变量(详见下面的配置步骤)
|
|
44
|
+
|
|
45
|
+
### 方式三:从源码构建(开发者)
|
|
46
|
+
|
|
47
|
+
**前置要求:**
|
|
48
|
+
- **Rust** 1.70+
|
|
49
|
+
- **系统依赖**:
|
|
50
|
+
- Linux: `pkg-config`, `libssl-dev`, `build-essential`
|
|
51
|
+
- macOS: Xcode Command Line Tools
|
|
52
|
+
- Windows: Microsoft Visual Studio C++ Build Tools
|
|
34
53
|
|
|
35
54
|
```bash
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
```
|
|
55
|
+
# 克隆仓库
|
|
56
|
+
git clone git@github.com:Protagonistss/fnva.git
|
|
57
|
+
cd fnva
|
|
40
58
|
|
|
41
|
-
|
|
59
|
+
# 构建
|
|
60
|
+
cargo build --release
|
|
42
61
|
|
|
43
|
-
|
|
62
|
+
# 二进制文件位置:
|
|
63
|
+
# Windows: target\release\fnva.exe
|
|
64
|
+
# macOS/Linux: target/release/fnva
|
|
65
|
+
```
|
|
44
66
|
|
|
45
|
-
|
|
67
|
+
### 安装后配置
|
|
46
68
|
|
|
47
|
-
|
|
48
|
-
1. 在 GitHub 上创建新的 Release 标签(例如 `v0.1.0`)
|
|
49
|
-
2. GitHub Actions 会自动构建所有平台
|
|
50
|
-
3. 构建完成后自动发布到 npm
|
|
69
|
+
#### 1. 验证安装
|
|
51
70
|
|
|
52
|
-
**本地构建所有平台(需要交叉编译工具):**
|
|
53
71
|
```bash
|
|
54
|
-
|
|
72
|
+
fnva --version
|
|
55
73
|
```
|
|
56
74
|
|
|
57
|
-
|
|
75
|
+
#### 2. Shell 集成
|
|
76
|
+
|
|
77
|
+
为了获得最佳体验,需要配置 Shell 集成。这会让 fnva 在新的 Shell 会话中自动加载环境。
|
|
58
78
|
|
|
59
|
-
|
|
79
|
+
**PowerShell(推荐):**
|
|
80
|
+
```powershell
|
|
81
|
+
# 添加到 PowerShell Profile
|
|
82
|
+
fnva env env --shell powershell | Out-String | Invoke-Expression
|
|
60
83
|
|
|
61
|
-
|
|
84
|
+
# 或手动添加到 $PROFILE
|
|
85
|
+
echo 'fnva env env --shell powershell | Out-String | Invoke-Expression' >> $PROFILE
|
|
86
|
+
```
|
|
62
87
|
|
|
88
|
+
**Bash/Zsh:**
|
|
63
89
|
```bash
|
|
64
|
-
#
|
|
65
|
-
|
|
90
|
+
# 添加到 ~/.bashrc 或 ~/.zshrc
|
|
91
|
+
echo 'eval "$(fnva env env --shell bash)"' >> ~/.bashrc
|
|
92
|
+
# 或
|
|
93
|
+
echo 'eval "$(fnva env env --shell zsh)"' >> ~/.zshrc
|
|
66
94
|
|
|
67
|
-
#
|
|
68
|
-
|
|
95
|
+
# 重新加载配置
|
|
96
|
+
source ~/.bashrc # 或 source ~/.zshrc
|
|
69
97
|
```
|
|
70
98
|
|
|
71
|
-
|
|
99
|
+
**Fish:**
|
|
100
|
+
```fish
|
|
101
|
+
# 添加到 ~/.config/fish/config.fish
|
|
102
|
+
echo 'fnva env env --shell fish | source' >> ~/.config/fish/config.fish
|
|
103
|
+
```
|
|
72
104
|
|
|
73
|
-
|
|
105
|
+
#### 3. 配置文件
|
|
74
106
|
|
|
75
|
-
|
|
107
|
+
首次运行时,fnva 会自动创建配置文件:
|
|
76
108
|
|
|
77
109
|
```bash
|
|
110
|
+
# 配置文件位置
|
|
111
|
+
Linux/macOS: ~/.fnva/config.toml
|
|
112
|
+
Windows: %USERPROFILE%\.fnva\config.toml
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
#### 4. 测试安装
|
|
116
|
+
|
|
117
|
+
```bash
|
|
118
|
+
# 列出所有环境类型
|
|
119
|
+
fnva env list-types
|
|
120
|
+
|
|
121
|
+
# 查看 Java 环境
|
|
78
122
|
fnva java list
|
|
123
|
+
|
|
124
|
+
# 查看 CC 环境
|
|
125
|
+
fnva cc list
|
|
126
|
+
|
|
127
|
+
# 查看 LLM 环境
|
|
128
|
+
fnva llm list
|
|
79
129
|
```
|
|
80
130
|
|
|
81
|
-
|
|
131
|
+
## 使用方法
|
|
132
|
+
|
|
133
|
+
### Java 环境管理
|
|
134
|
+
|
|
135
|
+
#### 列出所有 Java 环境
|
|
82
136
|
|
|
83
137
|
```bash
|
|
84
|
-
fnva java
|
|
138
|
+
fnva java list
|
|
85
139
|
```
|
|
86
140
|
|
|
87
141
|
#### 添加 Java 环境
|
|
@@ -93,11 +147,36 @@ fnva java add --name jdk-17 --home /usr/lib/jvm/java-17-openjdk --description "O
|
|
|
93
147
|
#### 切换到 Java 环境
|
|
94
148
|
|
|
95
149
|
```bash
|
|
96
|
-
#
|
|
150
|
+
# Bash / Zsh
|
|
97
151
|
eval "$(fnva java use jdk-17)"
|
|
98
152
|
|
|
99
|
-
#
|
|
100
|
-
|
|
153
|
+
# Fish
|
|
154
|
+
fnva java use jdk-17 --shell fish | source
|
|
155
|
+
|
|
156
|
+
# PowerShell
|
|
157
|
+
fnva java use jdk-17 --shell powershell | Invoke-Expression
|
|
158
|
+
|
|
159
|
+
# CMD
|
|
160
|
+
fnva java use jdk-17 --shell cmd > %TEMP%\fnva_use.cmd && call %TEMP%\fnva_use.cmd
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
#### 设置默认 Java 环境
|
|
164
|
+
|
|
165
|
+
```bash
|
|
166
|
+
# 设置默认环境
|
|
167
|
+
fnva java default jdk-21
|
|
168
|
+
|
|
169
|
+
# 查看当前默认环境
|
|
170
|
+
fnva java default
|
|
171
|
+
|
|
172
|
+
# 清除默认设置
|
|
173
|
+
fnva java default --unset
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
#### 查看当前激活的环境
|
|
177
|
+
|
|
178
|
+
```bash
|
|
179
|
+
fnva java current
|
|
101
180
|
```
|
|
102
181
|
|
|
103
182
|
#### 删除 Java 环境
|
|
@@ -106,6 +185,52 @@ eval "$(fnva java use jdk-17 --shell bash)"
|
|
|
106
185
|
fnva java remove jdk-17
|
|
107
186
|
```
|
|
108
187
|
|
|
188
|
+
#### 扫描系统中的 Java 安装
|
|
189
|
+
|
|
190
|
+
```bash
|
|
191
|
+
fnva java scan
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
**扫描功能详解:**
|
|
195
|
+
|
|
196
|
+
**基础扫描:**
|
|
197
|
+
- 自动检测系统标准 Java 安装路径
|
|
198
|
+
- 扫描用户主目录下的 `.fnva/java-packages`
|
|
199
|
+
- 检查 PATH 环境变量中的 Java 可执行文件
|
|
200
|
+
|
|
201
|
+
**自定义扫描路径:**
|
|
202
|
+
|
|
203
|
+
1. **配置文件方式**(推荐):
|
|
204
|
+
```toml
|
|
205
|
+
# ~/.fnva/config.toml
|
|
206
|
+
custom_java_scan_paths = [
|
|
207
|
+
"D:\\tools\\java",
|
|
208
|
+
"/opt/custom/java",
|
|
209
|
+
"/home/user/my-jdks"
|
|
210
|
+
]
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
2. **环境变量方式**:
|
|
214
|
+
```bash
|
|
215
|
+
# 临时添加扫描路径
|
|
216
|
+
export FNVA_SCAN_PATHS="/path/to/jdk1:/path/to/jdk2"
|
|
217
|
+
fnva java scan
|
|
218
|
+
|
|
219
|
+
# Windows
|
|
220
|
+
set FNVA_SCAN_PATHS=D:\tools\java;E:\other\java
|
|
221
|
+
fnva java scan
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
**扫描性能:**
|
|
225
|
+
- 🔒 **安全**:只扫描指定路径,不进行全盘搜索
|
|
226
|
+
- ⚡ **快速**:使用高效的去重算法,避免重复处理
|
|
227
|
+
- 🎯 **精确**:智能识别 Java 安装,过滤无效路径
|
|
228
|
+
|
|
229
|
+
**支持的扫描路径:**
|
|
230
|
+
- Windows:`C:\Program Files\Java`、`C:\Program Files\Eclipse Adoptium` 等
|
|
231
|
+
- macOS:`/Library/Java/JavaVirtualMachines`、`/opt/homebrew/Caskroom` 等
|
|
232
|
+
- Linux:`/usr/lib/jvm`、`/opt/java`、`/usr/local/java` 等
|
|
233
|
+
|
|
109
234
|
### LLM 环境管理
|
|
110
235
|
|
|
111
236
|
#### 列出所有 LLM 环境
|
|
@@ -171,6 +296,126 @@ fnva llm use openai-dev --shell powershell | Invoke-Expression
|
|
|
171
296
|
fnva llm remove openai-dev
|
|
172
297
|
```
|
|
173
298
|
|
|
299
|
+
### Claude Code (CC) 环境管理
|
|
300
|
+
|
|
301
|
+
专门为 Claude Code 设计的环境管理功能,支持多种 Claude Code 兼容服务的环境切换。
|
|
302
|
+
|
|
303
|
+
#### 列出所有 CC 环境
|
|
304
|
+
|
|
305
|
+
```bash
|
|
306
|
+
fnva cc list
|
|
307
|
+
```
|
|
308
|
+
|
|
309
|
+
#### 添加 CC 环境
|
|
310
|
+
|
|
311
|
+
```bash
|
|
312
|
+
# 方法一:使用 JSON 配置
|
|
313
|
+
fnva cc add glmcc '{
|
|
314
|
+
"provider": "anthropic",
|
|
315
|
+
"api_key": "your-api-key",
|
|
316
|
+
"base_url": "https://open.bigmodel.cn/api/anthropic",
|
|
317
|
+
"model": "glm-4.6",
|
|
318
|
+
"description": "GLM-4.6 Claude Code 环境"
|
|
319
|
+
}'
|
|
320
|
+
|
|
321
|
+
# 方法二:直接编辑配置文件
|
|
322
|
+
# 编辑 ~/.fnva/config.toml,添加:
|
|
323
|
+
# [[cc_environments]]
|
|
324
|
+
# name = "glmcc"
|
|
325
|
+
# provider = "anthropic"
|
|
326
|
+
# api_key = "your-api-key"
|
|
327
|
+
# base_url = "https://open.bigmodel.cn/api/anthropic"
|
|
328
|
+
# model = "glm-4.6"
|
|
329
|
+
# description = "GLM-4.6 Claude Code 环境"
|
|
330
|
+
```
|
|
331
|
+
|
|
332
|
+
#### 切换到 CC 环境
|
|
333
|
+
|
|
334
|
+
```bash
|
|
335
|
+
# PowerShell(推荐)
|
|
336
|
+
fnva cc use glmcc --shell powershell | Invoke-Expression
|
|
337
|
+
|
|
338
|
+
# Bash/Zsh
|
|
339
|
+
eval "$(fnva cc use glmcc)"
|
|
340
|
+
|
|
341
|
+
# Fish
|
|
342
|
+
fnva cc use glmcc --shell fish | source
|
|
343
|
+
|
|
344
|
+
# CMD
|
|
345
|
+
fnva cc use glmcc --shell cmd > %TEMP%\fnva_cc.cmd && call %TEMP%\fnva_cc.cmd
|
|
346
|
+
```
|
|
347
|
+
|
|
348
|
+
#### Manage default CC environment
|
|
349
|
+
|
|
350
|
+
```bash
|
|
351
|
+
# Set default CC environment
|
|
352
|
+
fnva cc default glmcc
|
|
353
|
+
|
|
354
|
+
# Show current default CC environment
|
|
355
|
+
fnva cc default
|
|
356
|
+
|
|
357
|
+
# Unset default CC environment
|
|
358
|
+
fnva cc default --unset
|
|
359
|
+
```
|
|
360
|
+
|
|
361
|
+
#### 查看当前激活的 CC 环境
|
|
362
|
+
|
|
363
|
+
```bash
|
|
364
|
+
fnva cc current
|
|
365
|
+
```
|
|
366
|
+
|
|
367
|
+
#### 删除 CC 环境
|
|
368
|
+
|
|
369
|
+
```bash
|
|
370
|
+
fnva cc remove glmcc
|
|
371
|
+
```
|
|
372
|
+
|
|
373
|
+
#### 预配置的 CC 环境
|
|
374
|
+
|
|
375
|
+
fnva 提供了一些常用的 CC 环境配置:
|
|
376
|
+
|
|
377
|
+
- **glmcc**: GLM-4.6 智谱 AI Claude Code 兼容服务
|
|
378
|
+
- **anycc**: AnyCC 通用 Claude Code 代理服务
|
|
379
|
+
- **kimicc**: Kimi AI Claude Code 兼容服务
|
|
380
|
+
|
|
381
|
+
#### 环境变量说明
|
|
382
|
+
|
|
383
|
+
CC 环境切换会设置以下环境变量:
|
|
384
|
+
|
|
385
|
+
- `ANTHROPIC_AUTH_TOKEN`: Claude Code 认证令牌
|
|
386
|
+
- `ANTHROPIC_BASE_URL`: Claude Code API 基础 URL
|
|
387
|
+
- `ANTHROPIC_DEFAULT_SONNET_MODEL`: 默认使用的模型
|
|
388
|
+
- `API_TIMEOUT_MS`: API 请求超时时间
|
|
389
|
+
- `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC`: 禁用非必要网络流量
|
|
390
|
+
|
|
391
|
+
#### 配置示例
|
|
392
|
+
|
|
393
|
+
```toml
|
|
394
|
+
[[cc_environments]]
|
|
395
|
+
name = "glmcc"
|
|
396
|
+
provider = "anthropic"
|
|
397
|
+
api_key = "your-glm-api-key"
|
|
398
|
+
base_url = "https://open.bigmodel.cn/api/anthropic"
|
|
399
|
+
model = "glm-4.6"
|
|
400
|
+
description = "GLM-4.6 Claude Code 环境"
|
|
401
|
+
|
|
402
|
+
[[cc_environments]]
|
|
403
|
+
name = "anycc"
|
|
404
|
+
provider = "anthropic"
|
|
405
|
+
api_key = "your-anycc-api-key"
|
|
406
|
+
base_url = "https://your-anycc-proxy.com"
|
|
407
|
+
model = "claude-sonnet-4-5"
|
|
408
|
+
description = "AnyCC 代理服务"
|
|
409
|
+
|
|
410
|
+
[[cc_environments]]
|
|
411
|
+
name = "kimicc"
|
|
412
|
+
provider = "anthropic"
|
|
413
|
+
api_key = "your-kimi-api-key"
|
|
414
|
+
base_url = "https://api.moonshot.cn/anthropic"
|
|
415
|
+
model = "kimi-k2-turbo-preview"
|
|
416
|
+
description = "Kimi AI Claude Code 环境"
|
|
417
|
+
```
|
|
418
|
+
|
|
174
419
|
## 配置文件
|
|
175
420
|
|
|
176
421
|
配置文件位置:
|
|
@@ -184,11 +429,13 @@ fnva llm remove openai-dev
|
|
|
184
429
|
查看 `config/config.toml.example` 获取完整配置示例。
|
|
185
430
|
|
|
186
431
|
```toml
|
|
432
|
+
# Java 环境配置
|
|
187
433
|
[[java_environments]]
|
|
188
434
|
name = "jdk-17"
|
|
189
435
|
java_home = "/usr/lib/jvm/java-17-openjdk"
|
|
190
436
|
description = "OpenJDK 17"
|
|
191
437
|
|
|
438
|
+
# LLM 环境配置
|
|
192
439
|
[[llm_environments]]
|
|
193
440
|
name = "openai-dev"
|
|
194
441
|
provider = "openai"
|
|
@@ -196,64 +443,51 @@ api_key = "${OPENAI_API_KEY}"
|
|
|
196
443
|
base_url = "https://api.openai.com/v1"
|
|
197
444
|
model = "gpt-4"
|
|
198
445
|
temperature = 0.7
|
|
446
|
+
max_tokens = 2000
|
|
447
|
+
description = "OpenAI 开发环境"
|
|
448
|
+
|
|
449
|
+
# Claude Code (CC) 环境配置
|
|
450
|
+
[[cc_environments]]
|
|
451
|
+
name = "glmcc"
|
|
452
|
+
provider = "anthropic"
|
|
453
|
+
api_key = "${GLM_API_KEY}"
|
|
454
|
+
base_url = "https://open.bigmodel.cn/api/anthropic"
|
|
455
|
+
model = "glm-4.6"
|
|
456
|
+
description = "GLM-4.6 Claude Code 环境"
|
|
457
|
+
|
|
458
|
+
[[cc_environments]]
|
|
459
|
+
name = "anycc"
|
|
460
|
+
provider = "anthropic"
|
|
461
|
+
api_key = "sk-your-api-key"
|
|
462
|
+
base_url = "https://your-proxy.com"
|
|
463
|
+
model = "claude-sonnet-4-5"
|
|
464
|
+
description = "AnyCC 代理服务"
|
|
465
|
+
|
|
466
|
+
# 仓库配置
|
|
467
|
+
[repositories]
|
|
468
|
+
java = [
|
|
469
|
+
"https://mirrors.aliyun.com/eclipse/temurin-compliance/temurin",
|
|
470
|
+
"https://api.adoptium.net/v3"
|
|
471
|
+
]
|
|
472
|
+
maven = [
|
|
473
|
+
"https://maven.aliyun.com/repository/public",
|
|
474
|
+
"https://search.maven.org/solrsearch/select"
|
|
475
|
+
]
|
|
199
476
|
```
|
|
200
477
|
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
name
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
### Bash/Zsh
|
|
215
|
-
|
|
216
|
-
在 `~/.bashrc` 或 `~/.zshrc` 中添加:
|
|
217
|
-
|
|
218
|
-
```bash
|
|
219
|
-
# 快速切换 Java 环境
|
|
220
|
-
alias java17='eval "$(fnva java use jdk-17)"'
|
|
221
|
-
alias java11='eval "$(fnva java use jdk-11)"'
|
|
222
|
-
|
|
223
|
-
# 快速切换 LLM 环境
|
|
224
|
-
alias llm-openai='eval "$(fnva llm use openai-dev)"'
|
|
225
|
-
alias llm-anthropic='eval "$(fnva llm use anthropic-prod)"'
|
|
226
|
-
```
|
|
227
|
-
|
|
228
|
-
### Fish
|
|
229
|
-
|
|
230
|
-
在 `~/.config/fish/config.fish` 中添加:
|
|
231
|
-
|
|
232
|
-
```fish
|
|
233
|
-
function java17
|
|
234
|
-
fnva java use jdk-17 | source
|
|
235
|
-
end
|
|
236
|
-
|
|
237
|
-
function llm-openai
|
|
238
|
-
fnva llm use openai-dev | source
|
|
239
|
-
end
|
|
240
|
-
```
|
|
241
|
-
|
|
242
|
-
### PowerShell
|
|
243
|
-
|
|
244
|
-
在 `$PROFILE` 中添加:
|
|
245
|
-
|
|
246
|
-
```powershell
|
|
247
|
-
function Switch-Java {
|
|
248
|
-
param([string]$Name)
|
|
249
|
-
fnva java use $Name | Invoke-Expression
|
|
250
|
-
}
|
|
251
|
-
|
|
252
|
-
function Switch-Llm {
|
|
253
|
-
param([string]$Name)
|
|
254
|
-
fnva llm use $Name | Invoke-Expression
|
|
255
|
-
}
|
|
256
|
-
```
|
|
478
|
+
### 常用命令速查
|
|
479
|
+
|
|
480
|
+
| 命令 | 功能 | 示例 |
|
|
481
|
+
|------|------|------|
|
|
482
|
+
| `fnva java list` | 列出 Java 环境 | `fnva java list` |
|
|
483
|
+
| `fnva java use <name>` | 切换 Java 环境 | `fnva java use jdk21` |
|
|
484
|
+
| `fnva java default <name>` | 设置默认 Java | `fnva java default jdk21` |
|
|
485
|
+
| `fnva cc list` | 列出 CC 环境 | `fnva cc list` |
|
|
486
|
+
| `fnva cc use <name>` | 切换 CC 环境 | `fnva cc use glmcc` |
|
|
487
|
+
| `fnva cc default <name>` | 设置默认 CC 环境 | `fnva cc default glmcc` |
|
|
488
|
+
| `fnva llm list` | 列出 LLM 环境 | `fnva llm list` |
|
|
489
|
+
| `fnva llm use <name>` | 切换 LLM 环境 | `fnva llm use openai-dev` |
|
|
490
|
+
| `fnva env switch <type> <name>` | 通用切换 | `fnva env switch java jdk17` |
|
|
257
491
|
|
|
258
492
|
## 许可证
|
|
259
493
|
|
package/bin/fnva.js
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
const { spawnSync } = require('child_process');
|
|
4
|
+
const fs = require('fs');
|
|
5
|
+
const path = require('path');
|
|
6
|
+
|
|
7
|
+
function resolvePlatform() {
|
|
8
|
+
switch (process.platform) {
|
|
9
|
+
case 'win32':
|
|
10
|
+
case 'darwin':
|
|
11
|
+
case 'linux':
|
|
12
|
+
return process.platform;
|
|
13
|
+
default:
|
|
14
|
+
throw new Error(`Unsupported platform: ${process.platform}`);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
function resolveArch() {
|
|
19
|
+
const arch = process.arch;
|
|
20
|
+
if (arch === 'x64') {
|
|
21
|
+
return 'x64';
|
|
22
|
+
}
|
|
23
|
+
if (arch === 'arm64') {
|
|
24
|
+
return 'arm64';
|
|
25
|
+
}
|
|
26
|
+
// Fallback to x64 for unknown architectures to keep previous behaviour.
|
|
27
|
+
return 'x64';
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
function buildBinaryPath() {
|
|
31
|
+
const platform = resolvePlatform();
|
|
32
|
+
const arch = resolveArch();
|
|
33
|
+
const scriptDir = __dirname;
|
|
34
|
+
const projectRoot = path.resolve(scriptDir, '..');
|
|
35
|
+
const platformDir = `${platform}-${arch}`;
|
|
36
|
+
const binaryName = platform === 'win32' ? 'fnva.exe' : 'fnva';
|
|
37
|
+
return path.join(projectRoot, 'platforms', platformDir, binaryName);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
function run() {
|
|
41
|
+
const binaryPath = buildBinaryPath();
|
|
42
|
+
|
|
43
|
+
if (!fs.existsSync(binaryPath)) {
|
|
44
|
+
console.error(`Error: binary not found: ${binaryPath}`);
|
|
45
|
+
console.error('');
|
|
46
|
+
console.error("Please build the CLI binaries first, e.g. run 'npm run build' or 'npm run build:all'.");
|
|
47
|
+
process.exit(1);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
const result = spawnSync(binaryPath, process.argv.slice(2), {
|
|
51
|
+
stdio: 'inherit',
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
if (result.error) {
|
|
55
|
+
console.error(`Failed to execute fnva: ${result.error.message}`);
|
|
56
|
+
process.exit(result.status ?? 1);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
process.exit(result.status ?? 0);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
run();
|
package/package.json
CHANGED
|
@@ -1,13 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "fnva",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.6",
|
|
4
4
|
"description": "跨平台环境切换工具,支持 Java 和 LLM 环境配置",
|
|
5
5
|
"author": "protagonistss",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"bin": {
|
|
8
|
-
"fnva": "./bin/fnva"
|
|
9
|
-
"fnva.cmd": "./bin/fnva.cmd",
|
|
10
|
-
"fnva.exe": "./bin/fnva.bat"
|
|
8
|
+
"fnva": "./bin/fnva.js"
|
|
11
9
|
},
|
|
12
10
|
"scripts": {
|
|
13
11
|
"prepublishOnly": "scripts/prepare-publish.sh",
|
package/platforms/fnva
CHANGED
|
Binary file
|
package/platforms/fnva.exe
CHANGED
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Skipping cross-compiled build for aarch64-unknown-linux-gnu
|