fs.readdirSync включает подкаталоги - PullRequest
0 голосов
/ 25 октября 2018

Я пытаюсь изменить свой код, чтобы включить файлы в подкаталоги:

const commandFiles = fs.readdirSync("./commands").filter(file => file.endsWith(".js"));

for (const file of commandFiles) {
  const command = require(`./commands/${file}`);
  client.commands.set(command.name, command);
}

Я нашел решение, которое выглядит немного абстрактным для меня, когда я пытался реализовать его, я получил ошибкуВот что я пытался:

const { readdirSync, statSync } = require('fs');
const { join } = require('path');

const dirs = p => readdirSync(p).filter(f => statSync(join(p, f)).isDirectory())

const commandFiles = ('./commands');

for (const file of commandFiles) {
    const command = require(`./commands/${file}`);
    client.commands.set(command.name, command);
}

Я получил следующую ошибку:

Error: Cannot find module './commands/.'

Что я могу сделать, чтобы эта работа работала?

1 Ответ

0 голосов
/ 25 октября 2018

Получил работать с

const fs = require('fs');

const walk = function(dir) {
    let results = [];
    const list = fs.readdirSync(dir);
    list.forEach(function(file) {
        file = dir + '/' + file;
        file_type = file.split(".").pop();
        file_name = file.split(/(\\|\/)/g).pop();
        const stat = fs.statSync(file);
        if (stat && stat.isDirectory()) { 
            results = results.concat(walk(file));
        } else { 
            if (file_type == "js") results.push(file);
        }
    });
    return results;
}

const commandFiles = walk('./commands');

for (const file of commandFiles) {
    const command = require(`${file}`);
...