You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用fs-extra检测.bundle文件存在性异常:始终返回true如何解决?

解决fs-extra中fs.exists()始终返回true的问题

我之前也踩过这个坑,咱们来梳理下问题出在哪,以及怎么解决:

首先你得纠正一个认知:fs-extra的fs.exists()方法并不会在文件不存在时抛出Promise错误。你看到的资料大概率是混淆了原生Node.js fs模块的旧版API,或者其他文件操作方法的行为。实际上,fs-extra的exists(别名pathExists)会返回一个Promise<boolean>——文件存在时resolve为true,不存在时resolve为false,只有当出现权限不足、路径格式无效这类真正的错误时,才会reject抛出异常。

你现在的代码只监听了Promise的resolve状态,不管返回的是true还是false,都会执行console.log("true"),这就是为什么你看到始终输出true的原因。

正确的写法应该是这样:

const fs = require('fs-extra');
const path = require('path'); // 记得引入path模块处理路径

// 用path.join拼接路径,避免手动拼接的分隔符问题(比如Windows和Linux的斜杠差异)
const targetBundlePath = path.join(themeDir, "Lights.bundle");

fs.exists(targetBundlePath)
  .then((fileExists) => {
    if (fileExists) {
      console.log("Lights.bundle存在,执行移动操作");
      // 这里写移动文件的逻辑,比如用fs.move()
      return fs.move(targetBundlePath, '/目标文件夹路径/Lights.bundle', { overwrite: true });
    } else {
      console.log("Lights.bundle不存在,使用默认文件");
      // 这里写处理默认文件的逻辑,比如复制默认文件到指定位置
      return fs.copy('/默认文件路径/default.bundle', targetBundlePath);
    }
  })
  .then(() => {
    console.log("操作完成");
  })
  .catch((err) => {
    console.error("文件操作出错:", err);
  });

额外提醒两个关键点:

  • 永远用path.join()拼接路径,不要手动用+号拼接,否则很容易出现/fooLights.bundle这种错误路径,导致你的判断完全失效。
  • 一定要加上catch()捕获异常,比如当你没有权限访问目标路径、磁盘空间不足时,这些情况才会触发Promise的reject,需要你处理错误。

内容的提问来源于stack exchange,提问作者Joe Scotto

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:06:12