【问题标题】:How to I resolve Error: cannot find module ? unable to load js files如何解决错误:找不到模块?无法加载js文件
【发布时间】:2021-09-06 03:30:48
【问题描述】:

您好,我正在尝试重写一些代码,其中机器人在特定文件夹中加载 .js 文件。 最初,要访问文件夹,我会从中加载命令文件,我会执行以下操作并重复相同的代码来访问不同的文件夹:

fs.readdirSync("../src/Commands/Moderation")
     .filter(file => file.endsWith(".js"))
     .forEach(file => {
     const command = require(`../Commands/Moderation/${file}`);
     console.log(`Command ${command.name} loaded`);
     this.commands.set(command.name, command);

    });

但是,我想要一个比上述更好的方法。正如您在上面的代码中看到的,我想在名为 Moderation 的文件夹中加载一个 js 文件,请记住我在文件夹 \Commands 中有多个包含 .js 文件的文件夹。

我想尝试加载命令的第二种也是首选方法会出现一些问题。 下面是我想要做的代码,但是我收到控制台错误Error: Cannot find module '../src/Commands/Moderators/colours.js'。 colours.js 文件确实存在于该目录中。我无法确定问题出在哪里。

fs.readdirSync("../src/Commands/").forEach(dir => {
    const commandfiles = fs.readdirSync(`../src/Commands/${dir}/`).filter(f => 
f.endsWith('.js'));
    for (const file of commandfiles) {
        const command = require(`../src/Commands/${dir}/${file}`);
        console.log(`Loading  ${command.name}`, "cmd");
        this.commands.set(command.name, command);

项目结构:

Users/
Jac/
Desktop/
jacbot/
src/
├─ main.js
├─ Structures/
├─ Commands/ 
│  ├─ Moderation/
│  │   ├─ colours.js
├─ Data/
│  ├─ config.json
├─ Events/
│  ├─ messages.js

任何帮助将不胜感激。

【问题讨论】:

  • 你能分享一下你的项目结构吗?
  • 确定我的项目结构是 ../src/Commands/Moderation/Files.js 我假设你是这个意思。
  • 不,我指的是文件的位置,例如this。错误可能是因为路径
  • @Joe 我已将项目结构添加到我的问题中。

标签: javascript node.js discord.js


【解决方案1】:

因为您的 Commands 文件位于 src 目录中,所以您无需离开该目录。如果您从主文件夹运行,您的路径应该类似于 ./Commands./Commands/Moderation

../ 表示你要离开当前目录上一级 ./ 在当前目录中

【讨论】:

  • 不幸的是,在对 ./Commands 进行修改后,错误仍然存​​在。
  • 根据结构,你的Commands文件夹中没有js文件,所以我相信你需要./Commands/Moderation
  • 在我的第二个代码块中正是这一行 const command = require(./Commands/${dir}/${file});fs.readdirSync("./Commands").forEach(dir => { const commandfiles = fs.readdirSync(./Commands/${dir} /).filter(f => f.endsWith('.js'));
  • 但是上面修改的错误仍然给我Error: Cannot find module './Commands/Moderation/colours.js'但是文件 colours.js 确实存在于该文件中。
  • 你在路径中的任何地方都硬编码了 colours.js 吗?
【解决方案2】:

所以经过多次挠头后,我想通了。问题与readdirSync 方法无关,而与require 行有关。它应该是 ../Commands/${dir}/${file} 而不是 ./Commands/${dir}/${file}

原因是代码位于项目根文件夹中另一个文件夹中的文件中。

因此,我们需要返回一个并在根文件夹中查找 Commands 文件夹。在这种情况下../ 返回根文件夹./src 然后/commands/folder/file

这是更正后的代码块。

fs.readdirSync("./Commands").forEach(dir => {
        const commandfiles = fs.readdirSync(`./Commands/${dir}/`).filter(file => file.endsWith('.js'));
        for (const file of commandfiles) {
           const command = require(`../Commands/${dir}/${file}`);
           console.log(`Loading  ${command.name}`, "cmd");
           this.commands.set(command.name, command);

【讨论】:

    猜你喜欢
    • 2021-08-31
    • 2019-09-10
    • 1970-01-01
    • 1970-01-01
    • 2021-06-19
    • 2019-06-24
    • 2023-01-23
    • 1970-01-01
    • 2021-04-05
    相关资源
    最近更新 更多