ERR_PNPM_ENOENT ENOENT: no such file or directory, scandir的解决方案

pnpm 在处理依赖安装时,一个名为 jsonfile (或依赖它的某个包) 的库创建了临时目录 (jsonfile_tmp_*),但在后续操作中无法找到它,导致了 ENOENT (No such file or directory) 错误。

你尝试的手动删除临时目录和使用 --force 都没有解决问题,这说明问题根源不在于那个临时的文件夹本身,而在于导致这个临时文件夹处理异常的深层原因

这通常是由以下几种情况之一引起的:

  1. pnpm 缓存或 node_modules 状态损坏:最常见的原因。某些文件处于不一致或损坏的状态。

  2. 文件系统权限或干扰:在 Windows 上,杀毒软件、系统索引服务或权限问题可能会锁定或瞬间删除 pnpm 正在操作的文件,导致竞争条件(race condition)。

  3. pnpm 版本 Bug:在极少数情况下,可能是你使用的 pnpm 版本存在特定的 bug。


解决方案:彻底清理法(推荐,成功率最高)

请严格按照以下步骤操作,这会彻底重置所有可能出问题的环节。

第一步:彻底清理项目状态

在你的项目根目录 (E:\react\ark) 打开终端(PowerShell 或 CMD),然后执行以下命令:

  1. 删除 node_modules 文件夹

    这个文件夹是问题的核心,必须整个删掉,而不是只删里面的临时文件。

    codePowershell

    复制代码
    # 强制递归删除整个 node_modules 目录
    Remove-Item -Recurse -Force node_modules
  2. 删除 pnpm-lock.yaml 文件

    这个锁文件可能记录了错误或不一致的依赖树信息。

    codePowershell

    复制代码
    # 删除锁文件
    Remove-Item -Force pnpm-lock.yaml
  3. 清理 pnpm 的全局缓存

    这是最关键的一步,因为损坏的包可能就存在于缓存中。

    codePowershell

    复制代码
    pnpm store prune

    这个命令会清理掉缓存中未被引用的包,有时就能解决问题。

第二步:重新安装

现在你的项目环境已经非常干净了,像第一次克隆下来一样。重新执行安装命令:

codePowershell

复制代码
# 不再需要 --force,正常安装即可
pnpm install --filter mobile

如果上述方法仍然失败,请尝试以下进阶方案

方案 A:检查并更新 pnpm 版本

旧版本的 pnpm 可能有 bug。

codePowershell

复制代码
# 查看当前 pnpm 版本
pnpm -v

# 更新 pnpm 到最新版
pnpm add -g pnpm

# 之后再重复"彻底清理法"的步骤
方案 B:以管理员身份运行终端

文件权限问题在 Windows 上很常见。

  1. 右键点击 PowerShell 或 CMD 图标。

  2. 选择 "以管理员身份运行"。

  3. 在打开的管理员终端里,cd 到你的项目目录。

  4. 重复"彻底清理法"的步骤。

方案 C:排除外部程序干扰

暂时禁用你的杀毒软件、防火墙或任何可能监控文件系统的软件,然后再次尝试"彻底清理法"。这类软件有时会错误地将 pnpm 的高速文件操作判断为恶意行为并进行阻止。

总结

请先严格执行"彻底清理法"。按照这个顺序,95% 以上的类似问题都能得到解决。

  1. Remove-Item -Recurse -Force node_modules

  2. Remove-Item -Force pnpm-lock.yaml

  3. pnpm store prune

  4. pnpm install --filter mobile

这个问题的本质是 pnpm 在进行原子文件写入(先写临时文件,再重命名)的过程中被打断或失败,导致状态不一致。彻底的清理可以保证 pnpm 从一个已知的、正确的状态重新开始整个依赖解析和安装过程。

相关推荐
木木剑光11 分钟前
我开源了一个 React 组件库,沉淀了多个高频组件和实用 Hooks
前端·javascript·react.js
Csvn1 小时前
React 19 `use()` 来了:以后数据加载可以不用 useEffect?
前端·react.js
许我半盏清茶2 小时前
前端路由:理解 hash 路由和 history 路由原理
前端·react.js
老王以为1 天前
React Renderer 分离的多平台架构
前端·react native·react.js
张元清1 天前
React useDebounce Hook:给状态和回调做防抖(2026)
javascript·react.js
YFF菲菲兔2 天前
useState 源码解析
react.js
Flynt2 天前
我的Next.js项目升级到16之后,dev倒是快了,但build差点让我回退
react.js·next.js·turbopack
光影少年3 天前
HashRouter 和 BrowserRouter 区别、底层原理、部署差异
前端·react.js·nestjs
kyriewen4 天前
我用 50 行代码重写了 React Router 核心,终于搞懂了前端路由原理
前端·javascript·react.js
ZhengEnCi4 天前
Q02-Vue-React-index.html完全指南
vue.js·react.js·html