Node.js требовать локальный файл выдает ошибку

#javascript #node.js #discord.js

#javascript #node.js #discord.js

Вопрос:

Это файловая система моего проекта.

 root
index.js
package.json
...etc
commamds
- ping.js
- eval.js
- ...etc
  

Это обычный discord.js бот.
Но когда я пытаюсь перезагрузить команды, я использую следующий код:

 ...etc
let pull = require(`./${file}`);
// file is command files from fs.readdirSync() and it can be 'ping.js', 'eval.js', ...
...etc
  

Но это выдает ошибку referenceerror, что модуль не может быть найден. Но когда я пытаюсь fs.ReadFile(), это работает. В чем проблема?

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

1. Пожалуйста, замените ${file} на пример имени файла.

Ответ №1:

fs.readFile() по умолчанию используется текущий рабочий каталог, если путь отсутствует или если в имени файла указан относительный путь.

require() имеет совершенно отдельный набор правил для того, где он ищет файлы. Например, имя файла, к которому вообще нет пути, просматривается в node_modules каталоге и в расположении глобальных модулей. Имя файла, начинающееся с ./ , просматривается в домашнем каталоге текущего модуля. И так далее… Это другой набор правил, чем fs.readFile() .

Поскольку вы не показываете нам, что file есть на самом деле, трудно точно определить, но, возможно, вам нужно объединить имя файла с соответствующим путем, чтобы вы указывали require() полное имя пути, и оно попадет именно туда, а не использовать обычные правила для того, где require() выглядит, когда задано только простое имя файла.

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

1. Спасибо! Я изменил код, как вы сказали, и это работает!