使用 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
所以我正在努力保持我的代码干净。为此,我使用了 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