由于在Node.js中导入/导出模块时有一些可怕的不一致之处,我在这里真的很痛苦。
更容易看到:
//game.js
const {Player} = require("./player");
{...}
console.log(Player); //outputs undefined
//player.js
class Player {
constructor(client, host = false) {
this.properties = {...client};
this.host = host;
this.hand = [];
}
{...}
}
module.exports = {Player};这看上去不错,但最奇怪的是。在另一个文件deck.js中,我以完全相同的方式导出。并在game.js中得到正确的识别。
//game.js
const {Deck} = require("./deck");
console.log(Deck); //outputs "[Function: Deck]"
//deck.js
class Deck {
constructor() {
this.deck = [...compressed_cards];
this.shuffle();
}
{...}
}
module.exports = {Deck};正如您所看到的,这两个文件都是本地文件。我可以很好地导入deck.js,但不能导入player.js,尽管方法完全相同。我尝试过module.exports.Player = Player,我直接设置了module.exports.Player = class Player {...},但它似乎不起作用。不管是谁想出来让我看起来像个白痴,谢谢。
哦,让我更困惑的是,我可以在文件夹之外的其他文件中导入player.js。但不是在里面。为什么。当然,我所有的其他文件都可以以完全相同的方式访问对方,没有任何问题。
文件结构如下所示:

发布于 2020-04-29 19:24:02
原因可能是您有循环依赖关系。这意味着player.js可能需要game.js或deck.js,因此当您在彼此需要的文件之间画线时,您将看到一个完整的循环。建议是重组您的依赖关系,以避免这种依赖结构。
有关循环/循环依赖关系的更多信息将在这里讨论:如何处理Node.js中的循环依赖关系
发布于 2020-04-19 05:34:32
根据这篇文章,您应该能够导入/导出这样的类:
//game.js
const Player = require("./player");
//player.js
class Player {...}
module.exports = Player;https://stackoverflow.com/questions/61299845
复制相似问题