Windows 上执行 npm install -g 报错 cannot find module ./with-temp-dir.js

这个错误信息 cannot find module ./with-temp-dir.js 通常意味着你的 npm 安装本身出现了问题,或者其内部文件损坏/缺失。with-temp-dir.jsnpm 内部用于处理临时目录的一个模块。

在 Windows 上遇到这种情况,以下是一些常见的解决方案,请按照顺序尝试:

1. 清理 npm 缓存并重试

首先,尝试清理 npm 缓存。有时缓存损坏会导致这类问题。

  1. 以管理员身份打开命令提示符或 PowerShell。 (非常重要,否则可能没有权限清理或安装)
    • 在开始菜单搜索 “cmd” 或 “PowerShell”,右键点击选择 “以管理员身份运行”。
  2. 执行清理命令:
    npm cache clean --force
    
  3. 然后再次尝试你的安装命令:
    npm install -g <your-package-name>
    
    (替换 <your-package-name> 为你实际要安装的包,例如 npm install -g yarnnpm install -g create-react-app

2. 修复或重新安装 npm

如果清理缓存无效,可能是 npm 本身的核心文件丢失或损坏。由于 npm 是随 Node.js 一起安装的,最可靠的方法是重新安装 Node.js

方法 A: 尝试升级 npm (如果当前 npm 还能跑起来的话)

  1. 以管理员身份打开命令提示符或 PowerShell。
  2. 尝试升级 npm 到最新稳定版:
    npm install -g npm@latest
    
    如果这条命令也报错 cannot find module ./with-temp-dir.js,说明 npm 损坏太严重,请直接跳到 方法 B

方法 B: 彻底卸载 Node.js 并重新安装 (推荐且最有效)

这是解决这类问题的最可靠方法。

  1. 卸载现有的 Node.js:

    • 打开 Windows 的 “控制面板” → “程序” → “程序和功能” (或在 Windows 10/11 中,通过 “设置” → “应用” → “应用和功能”)。
    • 找到列表中的 “Node.js”,右键点击选择 “卸载”。
  2. 手动删除残余文件和目录 (重要步骤!):
    卸载程序可能不会删除所有文件,尤其是全局包的目录和缓存。请手动删除以下目录:

    • C:\Program Files\nodejs\ (如果还存在)
    • C:\Users\<你的用户名>\AppData\Roaming\npm
    • C:\Users\<你的用户名>\AppData\Roaming\npm-cache
    • C:\Users\<你的用户名>\.npmrc (可选,这是 npm 的配置文件,删除后会恢复默认设置)

    注意:AppData 是隐藏文件夹,你可能需要在文件资源管理器中开启 “显示隐藏的项目”。

  3. 清理系统环境变量 (检查是否干净):

    • 右键点击 “此电脑” → “属性” → “高级系统设置” → “环境变量”。
    • 在 “系统变量” 和 “用户变量” 中,检查 Path 变量,确保没有指向旧的 Node.js 或 npm 路径。通常 Node.js 安装器会处理好这一步,但手动检查一遍更保险。
  4. 下载并安装最新稳定版 Node.js:

    • 访问 Node.js 官方网站:https://nodejs.org/
    • 下载 LTS (长期支持) 版本的 Windows 安装包 (.msi)。
    • 运行下载的 .msi 文件,按照提示一步步安装。建议选择默认安装路径。
  5. 验证安装:

    • 安装完成后,重启你的命令提示符或 PowerShell 窗口 (因为环境变量可能需要刷新)。
    • 输入以下命令验证 Node.js 和 npm 是否成功安装:
      node -v
      npm -v
      
      它们应该显示对应的版本号。
  6. 再次尝试安装你的包:

    npm install -g <your-package-name>
    

3. 检查权限问题

虽然以管理员身份运行命令提示符已经处理了大部分权限问题,但有时目录的 NTFS 权限可能被错误设置。

  • 确保 C:\Users\<你的用户名>\AppData\Roaming\npm 目录以及其子目录,还有 C:\Program Files\nodejs 目录,你的用户账户拥有完全控制的权限。

4. 检查杀毒软件/防火墙

极少数情况下,杀毒软件或防火墙可能会阻止 npm 写入或读取其自己的临时文件或模块。

  • 尝试暂时禁用你的杀毒软件或防火墙,然后再次运行 npm install -g 命令。如果成功,则需要为 Node.jsnpm 添加信任或排除规则。

通过上述步骤,特别是彻底重新安装 Node.js,你应该能够解决 cannot find module ./with-temp-dir.js 这个错误。