Skip to content

Releases: jiangding01/auto-node-switch

v0.2.0 - Hook 执行模型重构与多 Shell 关键缺陷修复

Choose a tag to compare

@jiangding01 jiangding01 released this 16 Jul 06:37

💥 行为变更 - 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 中函数内的 EXIT trap 挂在整个 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 模板由代码拼装生成,消除复制粘贴失同步