Чтение правильного каталога, но выводит его неправильно?

#node.js #discord.js #fs

#node.js #discord.js #fs

Вопрос:

следующий код [ниже] находится в файле .js, основанном в папке «Reloaders», и я пытаюсь добраться до папки «Commands».

Тем не менее, при каждой попытке, которую я делаю, я получаю ошибку:

Error: ENOENT: no such file or directory, scandir '../Commands'

Код

 const categories = fs.readdirSync("../Commands");
  

Вывод дерева

 C:.
 ---lib
|    ---Collections
|    ---Commands
|    ---Events
|    ---Handlers
|    ---Reloaders
|   ---Settings
  

Полный код

 var fs = require("fs");
const chokidar = require("chokidar");
const { basename } = require("path");
const Logger = require("../Handlers/LogHandler");
const { commands, aliases } = require("../Collectors/DiscordCollectors")
const categories = fs.readdirSync("../Commands");

const CommandReloader = async () => {
    categories.forEach(category => {
        chokidar.watch(`../Commands/${category}`, {
            awaitWriteFinish: true
        }).on("change", (file) => {
            const commandName = basename(file, ".js")
            delete require.cache[require.resolve(process.cwd()   `/lib/Commands/${category}/${commandName}.js`)];
            delete require.cache[require.resolve(process.cwd()   `/lib/Commands/${category}/${commandName}.js`)];
            commands.delete(process.cwd()   `/lib/Commands/${category}/${commandName}.js`);
            Logger.log("Command Reloader", `Deleted ${commandName} from ${category}.`);
            console.log(commands.get(commandName))

            const props = require(process.cwd()   `/lib/Commands/${category}/${commandName}.js`);
            commands.set(commandName, props);
            props.help.aliases.forEach(alias => {
                aliases.set(alias, commandName);
            });

            Logger.log("Command Reloader", `Reloaded ${commandName} from ${category}.`);
        });
    });
};

module.exports.start = CommandReloader;
  

Проблема с кэшем

 const commandName = basename(file, ".js")
delete require.cache[require.resolve(`${__dirname}/../Commands/${category}/${commandName}.js`)];
commands.delete(`${__dirname}/../Commands/${category}/${commandName}.js`);
console.log(commands.get(commandName))
Logger.log("Command Reloader", `Deleted ${commandName} from ${category}.`);
  

Проблема с выводом из кэша:

 [24/10/2020 22:10:03] [ Command Loader ] | Loaded lol from General.
[24/10/2020 22:10:06] [ Command Reloader ] | Deleted lol2 from Admin.
{
  run: [Function],
  help: {
    name: 'lol',
    aliases: [ 'l', 'o', 'l' ],
    description: 'Lol',
    usage: '(command name) ',
    category: 'Admin'
  }
}
[24/10/2020 22:10:06] [ Command Reloader ] | Reloaded lol2 from Admin.
  

Комментарии:

1. Путь должен быть относительно рабочего каталога, а не файла .js.

2. Вы можете сделать это относительно текущего файла, записав его следующим образом `${__dirname}/../Commands`

3. Дело в том, что весь код выглядит так: [отредактированный вопрос]

4. @mpen Это сработало бы только в том случае, если папка Commands существовала в загрузчиках; это просто проверка этой теории.

5. Это не имеет смысла. Если этот код находится в Reloaders каталоге, то __dirname есть C:/lib/Reloaders , следовательно ${__dirname}/.. , увеличивается на один каталог, что C:/lib/ , таким образом, должно быть полным C:/lib/Commands (или реалистично C:/lib/Reloaders/../Commands , но это одно и то же)