Releases: jiangding01/auto-node-switch
Releases · jiangding01/auto-node-switch
Release list
v0.2.0 - Hook 执行模型重构与多 Shell 关键缺陷修复
💥 行为变更 - Hook 执行模型重构
- 「切换 + 恢复」改为「一次性执行」: hook 不再修改 shell 的全局 Node 版本后再恢复,
而是仅为当前这一条命令使用目标版本(nvm 在子 shell 内切换、n/fnm 使用n exec/fnm exec)- 命令结束后不再输出"恢复版本"提示(无需恢复,父 shell 版本全程未被改动)
- Ctrl+C 中断命令不再有版本残留风险
- 提示信息全部改走 stderr:
$(npm ...)命令替换、CI 解析 npm 输出等场景不再被
"📁 检测到工作目录"等提示污染 - 工作目录数据格式: hook 内嵌数据从 JSON + sed 解析改为
dir|version按行存储
🔧 Bug Fixes - 重要修复
Bash 端核心功能失效(修复后 bash 用户首次真正可用)
- 版本切换永不触发: 目录匹配循环位于管道子 shell 中,匹配结果传不出函数主体
(zsh 因管道末段在当前 shell 执行而侥幸可用);改用 heredoc 循环,bash/zsh 行为一致 - 版本恢复永不执行: bash 中函数内的
EXITtrap 挂在整个 shell 退出上而非函数返回,
且会覆盖用户已有的 trap;新执行模型下彻底移除恢复逻辑 n use语义误用:n use <version>是"用该版本运行 node"而非切换版本,改用n exec- 目录前缀匹配误伤: grep 正则未转义路径元字符,改为 case 字面模式匹配
- n/fnm 模板缺失 yarn/pnpm hook: 三个包管理器 × 三个版本管理器现已全覆盖
PowerShell 端目录匹配整体失效
- JSON 转义错误: 嵌入单引号字符串的 JSON 被按双引号规则转义(
"→""),
导致 JSON 非法、ConvertFrom-Json异常被静默吞掉,hook 从不切换版本;
改为正确的单引号转义(仅'→'') - fnm/nvs 模板复制粘贴错误: yarn/pnpm 函数误用
nvm命令,已改为对应管理器命令 - 恢复逻辑加入
finally: Ctrl+C 中断命令时也能恢复全局版本(PowerShell 保留切换+恢复模式)
Fish 端修复
- 多工作目录失效: 原实现只解析第一个配置条目,现支持任意数量并按最深目录优先
- nvm 切换无效: 原实现在独立 bash 子进程中切换、对实际执行的命令毫无影响;
改为在同一 bash 子进程内完成切换 + 执行 - 修复 fish 专用字符串转义(POSIX
'\''风格对 fish 是错误的)
CLI 与交互模式
- 移除虚假的"配置已自动生效"提示: 子进程 source 对用户终端无效,改为输出准确的生效指引
- 交互模式补齐版本文件创建: 与命令行模式行为一致,均创建
.nvmrc/.node-version
✅ 测试与工程
- 新增 Hook 功能回归测试(28 项断言): 真实 bash/zsh 中验证渲染后的 hook,
覆盖本版本修复的全部历史缺陷(npm run test:hooks) - 新增发布产物回归测试(22 项断言): npm pack → 内容白名单 → 隔离安装 → 端到端(
npm run test:pack) - 综合测试隔离 HOME: 不再改写开发者真实的 shell 配置文件;修复测试报告计数错乱
- 构建前自动清理 dist: 避免把源码中已删除的遗留产物发布到 npm
- 移除未使用的 semver 依赖; 各 shell 模板由代码拼装生成,消除复制粘贴失同步