Realmente estoy sufriendo aquí debido a algunas incoherencias terribles en la importación / exportación de módulos en Node.js.

Es más fácil de ver:

//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};

Esto puede parecer bien, pero aquí está la parte más extraña. Dentro de otro archivo, deck.js, exporto exactamente de la misma manera. Y se reconoce correctamente en 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};

Estos son archivos locales, como puede ver. Puedo importar deck.js bien, pero no player.js, a pesar de las mismas metodologías. He intentado module.exports.Player = Player, he configurado directamente module.exports.Player = class Player {...}, parece que no funciona. A quien lo resuelva y me haga parecer un idiota, gracias.

Ah, y para aumentar mi confusión, puedo importar player.js en otros archivos fuera de la carpeta. Pero no adentro. Por qué. Y, por supuesto, todos mis otros archivos pueden acceder entre sí de la misma manera exactamente sin ningún problema.

La estructura del archivo se ve así:

this

1
LayneTheEpic 19 abr. 2020 a las 08:10

2 respuestas

La mejor respuesta

La razón podría ser que tiene dependencias circulares. Eso significa que player.js puede requerir game.js o deck.js, de modo que cuando dibuje líneas entre archivos que se requieren entre sí, verá un círculo completo. La sugerencia es reestructurar sus dependencias para evitar dicha estructura de dependencia.

Aquí se discute más sobre las dependencias circulares / cíclicas: Cómo lidiar con dependencias cíclicas en Node.js

0
Thee Sritabtim 29 abr. 2020 a las 19:24

De acuerdo con este artículo debería poder importar / exportar una clase como esta:

//game.js

const Player = require("./player");


//player.js

class Player {...}

module.exports = Player;

0
JorgeZapatero 19 abr. 2020 a las 05:34