pnpm 在处理依赖安装时,一个名为 jsonfile (或依赖它的某个包) 的库创建了临时目录 (jsonfile_tmp_*),但在后续操作中无法找到它,导致了 ENOENT (No such file or directory) 错误。
你尝试的手动删除临时目录和使用 --force 都没有解决问题,这说明问题根源不在于那个临时的文件夹本身,而在于导致这个临时文件夹处理异常的深层原因。
这通常是由以下几种情况之一引起的:
-
pnpm 缓存或 node_modules 状态损坏:最常见的原因。某些文件处于不一致或损坏的状态。
-
文件系统权限或干扰:在 Windows 上,杀毒软件、系统索引服务或权限问题可能会锁定或瞬间删除 pnpm 正在操作的文件,导致竞争条件(race condition)。
-
pnpm 版本 Bug:在极少数情况下,可能是你使用的 pnpm 版本存在特定的 bug。
解决方案:彻底清理法(推荐,成功率最高)
请严格按照以下步骤操作,这会彻底重置所有可能出问题的环节。
第一步:彻底清理项目状态
在你的项目根目录 (E:\react\ark) 打开终端(PowerShell 或 CMD),然后执行以下命令:
-
删除 node_modules 文件夹
这个文件夹是问题的核心,必须整个删掉,而不是只删里面的临时文件。
codePowershell
# 强制递归删除整个 node_modules 目录 Remove-Item -Recurse -Force node_modules -
删除 pnpm-lock.yaml 文件
这个锁文件可能记录了错误或不一致的依赖树信息。
codePowershell
# 删除锁文件 Remove-Item -Force pnpm-lock.yaml -
清理 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 上很常见。
-
右键点击 PowerShell 或 CMD 图标。
-
选择 "以管理员身份运行"。
-
在打开的管理员终端里,cd 到你的项目目录。
-
重复"彻底清理法"的步骤。
方案 C:排除外部程序干扰
暂时禁用你的杀毒软件、防火墙或任何可能监控文件系统的软件,然后再次尝试"彻底清理法"。这类软件有时会错误地将 pnpm 的高速文件操作判断为恶意行为并进行阻止。
总结
请先严格执行"彻底清理法"。按照这个顺序,95% 以上的类似问题都能得到解决。
-
Remove-Item -Recurse -Force node_modules
-
Remove-Item -Force pnpm-lock.yaml
-
pnpm store prune
-
pnpm install --filter mobile
这个问题的本质是 pnpm 在进行原子文件写入(先写临时文件,再重命名)的过程中被打断或失败,导致状态不一致。彻底的清理可以保证 pnpm 从一个已知的、正确的状态重新开始整个依赖解析和安装过程。