使用 exports.getRandomInt = getRandomInt 导出到另一个文件时,getRandomInt 不是函数

getRandomInt is not a function when exporting to another file with exports.getRandomInt = getRandomInt

所以我正在努力保持我的代码干净。为此,我使用了 VS 代码的内置代码重构“移动到新文件”。一如既往,它不可能那么容易,所以一切都不起作用。当我尝试在我的游戏 class 中使用此方法时,我收到一条错误消息 getRandomInt is not a function。我已经看到了十几个关于此的 Whosebug 线程,尽管其中 none 可以解决我的问题。然后我想这可能只是个人问题,所以我来了。两天都遇到同样的问题...

Game.js:


const { getRandomInt } = require("./index.js");

class Game {
    /**
     *
     * @param {Discord.Message} message
     * Passes the message object for the playerId that will be the game Id
     */
    constructor(message) {
        this.cards = [2, 3, 4, 5, 6, 7, 8, 9, 10, 11];
        this.playerId = message.author.id;
        this.dealerCards = [];
        this.playerCards = [];
        this.message = message;
    }

    start() {
        console.log(this.cards);
        for (let index = 0; index < 2; index++) {
            this.playerCards.push(this.cards[getRandomInt(1, this.cards.length)]); 
            //There's an error saying that getRandomInt is not a function
            this.dealerCards.push(this.cards[getRandomInt(1, this.cards.length)]);

        }
        console.log(this.playerCards);
        console.log(this.dealerCards);
        this.message.channel.send(`Dealer cards: ${this.dealerCards[0]} ${this.dealerCards[1]}\nPlayer cards ${this.playerCards[0]} ${this.playerCards[1]}`);

    }

    hit() {
        this.playerCards.push(this.cards[getRandomInt(1, this.cards.length)]);

    }
}
exports.Game = Game;

index.js(删减了一点,但应该没什么区别):

const { Game } = require("./Game.js");

function getRandomInt(min, max) {
    min = Math.ceil(min);
    max = Math.floor(max);
    return Math.floor(Math.random() * (max - min)) + min;
}
exports.getRandomInt = getRandomInt;

有那么难吗?它内置于 VS 代码的重构系统中,所以我觉得我有问题。

循环依赖问题。我不知道为什么您需要在 index.js 文件中导入 Game.js,但删除它会解决问题。如果您仍想在 index.js 中使用 Game.js,有一些方法适合您:

  • 导出一个空模块。例如:将 exports.Game = function(){};exports.getRandomInt = function(){}; 放在模块的开头。这种方法可以解决您的问题取决于您的逻辑,您最好提供有关您的代码的更多详细信息以了解您的真正问题。
  • 重构您的代码。

更多信息:

How to deal with cyclic dependencies in Node.js

https://nodejs.org/api/modules.html#modules_cycles