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

如何修改fs.readdirSync代码以正确读取commands目录下子文件夹内的JS文件

Node.js fs模块递归读取子目录JS文件解决方案

错误原因

Node.js 原生 fs.readdirSync 方法不支持通配符路径解析,你传入的 ./src/commands/* 会被当作字面量路径处理,系统无法找到对应目录,因此无法读取子目录文件。

可用方案

方案1:使用内置递归参数(推荐,Node.js 12.10.0+ 支持)

无需额外依赖,直接使用fs.readdirSync官方提供的递归遍历参数即可实现子目录扫描:

const fs = require('fs');
const path = require('path');

// 开启recursive参数递归扫描所有子目录
const allFiles = fs.readdirSync('./src/commands', {
  recursive: true
});

// 过滤出JS文件
const commandFiles = allFiles.filter(file => file.endsWith('.js'));

// 可选:将相对路径转为绝对路径方便后续导入
// const commandFiles = allFiles
//   .filter(file => file.endsWith('.js'))
//   .map(file => path.resolve('./src/commands', file));

方案2:手动递归实现(兼容低版本Node.js)

如果使用的Node.js版本低于12.10.0,可以手动实现递归遍历逻辑:

const fs = require('fs');
const path = require('path');

function scanJsFiles(dir, result = []) {
  const items = fs.readdirSync(dir);
  items.forEach(item => {
    const fullPath = path.join(dir, item);
    if (fs.statSync(fullPath).isDirectory()) {
      // 是目录则进入递归扫描
      scanJsFiles(fullPath, result);
    } else if (item.endsWith('.js')) {
      // 是JS文件则加入结果列表
      result.push(fullPath);
    }
  });
  return result;
}

const commandFiles = scanJsFiles('./src/commands');

方案3:使用glob工具(适合复杂路径匹配场景)

如果需要处理更灵活的路径匹配规则,可以使用第三方库glob:

  1. 安装依赖:
npm i glob
  1. 调用代码:
const glob = require('glob');
// ** 匹配任意层级的子目录
const commandFiles = glob.sync('./src/commands/**/*.js');

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 22:30:04