Nvm切换Node版本同时自动切换Npm、Yarn、Pnpm的缓存地址
我们使用Nvm,在切换Node版本时,包管理工具(Npm、Yarn、Pnpm)的缓存地址并不会因为Node版本的改变而改变,
这就导致了可能因为Node版本与依赖包不兼容而导致的项目运行问题。以下Shell脚本(本地系统:MacOs 26.2 (25C56) 修改的~/.zshrc文件)
可以实现在执行 “nvm use XXX” 时,自动为每个版本的Node切换独立的缓存地址。
一、修改文件:~/.zshrc:
# 启用 Zsh 的钩子功能 autoload -U add-zsh-hook # 统一函数:根据 Node.js 版本设置各包管理器的缓存路径 function sync_package_manager_cache { # 获取当前 Node 版本(去掉 'v' 前缀) local node_version=$(node -v 2>/dev/null | sed 's/^v//') if [ -n "$node_version" ]; then # 1. 设置 pnpm 存储路径 local pnpm_store_path="$HOME/.pnpm-store/v3/node-$node_version" mkdir -p "$pnpm_store_path" pnpm config set store-dir "$pnpm_store_path" --global > /dev/null 2>&1 # 2. 设置 npm 缓存路径 local npm_cache_path="$HOME/.npm_cache/node-$node_version" mkdir -p "$npm_cache_path" # 通过环境变量设置(优先级最高) export npm_config_cache="$npm_cache_path" # 同时写入全局配置 npm config set cache "$npm_cache_path" --global 2>/dev/null # 3. 设置 yarn (v1) 缓存路径 local yarn_cache_path="$HOME/.yarn_cache/node-$node_version" mkdir -p "$yarn_cache_path" # 通过环境变量设置 export YARN_CACHE_FOLDER="$yarn_cache_path" # 如果 yarn 已安装,也写入其全局配置 if command -v yarn &> /dev/null; then yarn config set cache-folder "$yarn_cache_path" --global 2>/dev/null fi # 可选:切换时显示提示(需要提示时可取消注释下一行) # echo "缓存目录已切换至 Node.js $node_version 对应路径" fi } # 将函数添加到 precmd 钩子,在每次显示命令提示符前执行 add-zsh-hook precmd sync_package_manager_cache # Shell 启动时立即执行一次,确保初始状态正确 sync_package_manager_cache
二、 修改保存文件以后执行生效:
source ~/.zshrc
三、验证是否生效:
nvm use 22 echo "Node版本: $(node -v)" echo "npm缓存: $(npm config get cache)" echo "yarn缓存: $(yarn cache dir 2>/dev/null || echo 'yarn未安装')" echo "pnpm存储: $(pnpm store path)" nvm use 24 echo "Node版本: $(node -v)" echo "npm缓存: $(npm config get cache)" echo "yarn缓存: $(yarn cache dir 2>/dev/null)" echo "pnpm存储: $(pnpm store path)"
执行结果:



浙公网安备 33010602011771号