找回密码
 立即注册
首页 业界区 业界 Nvm切换Node版本同时自动切换Npm、Yarn、Pnpm的缓存地址 ...

Nvm切换Node版本同时自动切换Npm、Yarn、Pnpm的缓存地址

步雪卉 4 天前
我们使用Nvm,在切换Node版本时,包管理工具(NpmYarnPnpm)的缓存地址并不会因为Node版本的改变而改变,
这就导致了可能因为Node版本与依赖包不兼容而导致的项目运行问题。以下Shell脚本(本地系统:MacOs 26.2 (25C56) 修改的~/.zshrc文件)

可以实现在执行 “nvm use XXX” 时,自动为每个版本的Node切换独立的缓存地址。
一、修改文件:~/.zshrc:
  1. # 启用 Zsh 的钩子功能
  2. autoload -U add-zsh-hook
  3. # 统一函数:根据 Node.js 版本设置各包管理器的缓存路径
  4. function sync_package_manager_cache {
  5.   # 获取当前 Node 版本(去掉 'v' 前缀)
  6.   local node_version=$(node -v 2>/dev/null | sed 's/^v//')
  7.   
  8.   if [ -n "$node_version" ]; then
  9.     # 1. 设置 pnpm 存储路径
  10.     local pnpm_store_path="$HOME/.pnpm-store/v3/node-$node_version"
  11.     mkdir -p "$pnpm_store_path"
  12.     pnpm config set store-dir "$pnpm_store_path" --global > /dev/null 2>&1
  13.     # 2. 设置 npm 缓存路径
  14.     local npm_cache_path="$HOME/.npm_cache/node-$node_version"
  15.     mkdir -p "$npm_cache_path"
  16.     # 通过环境变量设置(优先级最高)
  17.     export npm_config_cache="$npm_cache_path"
  18.     # 同时写入全局配置
  19.     npm config set cache "$npm_cache_path" --global 2>/dev/null
  20.     # 3. 设置 yarn (v1) 缓存路径
  21.     local yarn_cache_path="$HOME/.yarn_cache/node-$node_version"
  22.     mkdir -p "$yarn_cache_path"
  23.     # 通过环境变量设置
  24.     export YARN_CACHE_FOLDER="$yarn_cache_path"
  25.     # 如果 yarn 已安装,也写入其全局配置
  26.     if command -v yarn &> /dev/null; then
  27.       yarn config set cache-folder "$yarn_cache_path" --global 2>/dev/null
  28.     fi
  29.     # 可选:切换时显示提示(需要提示时可取消注释下一行)
  30.     # echo "缓存目录已切换至 Node.js $node_version 对应路径"
  31.   fi
  32. }
  33. # 将函数添加到 precmd 钩子,在每次显示命令提示符前执行
  34. add-zsh-hook precmd sync_package_manager_cache
  35. # Shell 启动时立即执行一次,确保初始状态正确
  36. sync_package_manager_cache
复制代码
 
二、 修改保存文件以后执行生效:
  1. source ~/.zshrc
复制代码
 
三、验证是否生效:
  1. nvm use 22
  2. echo "Node版本: $(node -v)"
  3. echo "npm缓存: $(npm config get cache)"
  4. echo "yarn缓存: $(yarn cache dir 2>/dev/null || echo 'yarn未安装')"
  5. echo "pnpm存储: $(pnpm store path)"
  6. nvm use 24
  7. echo "Node版本: $(node -v)"
  8. echo "npm缓存: $(npm config get cache)"
  9. echo "yarn缓存: $(yarn cache dir 2>/dev/null)"
  10. echo "pnpm存储: $(pnpm store path)"
复制代码
执行结果:
1.png

 
2.png

 

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

您需要登录后才可以回帖 登录 | 立即注册