web-dev-qa-db-fra.com

Pouvez-vous exporter plusieurs classes à partir d'un seul module Nodejs?

Actuellement, j'ai 4 classes enfants chacune dans leur propre fichier. Je les exige tous dans le même fichier. Je me demande si je peux contenir ces 4 classes dans un seul module. Actuellement, je les importe comme ça

var Jack = require('./Jack.js');
var JackInstance = new Jack();
var Jones = require('./Jones.js');
var JonesInstance = new Jones();

Je voudrais les importer comme ça

var People = require('./People.js');
var JackInstance = new People.Jack();

Ou même

var Jack = require('./People.js').Jack;
var JackInstance = new Jack();

Mes classes sont définies comme si

class Jack{
    //Memeber variables, functions, etc
}

module.exports = Jack;
29
Native Coder

Vous pouvez exporter plusieurs classes comme ceci:

par exemple. People.js

class Jack{
   //Member variables, functions, etc
}

class John{
   //Member variables, functions, etc
}

module.exports = {
  Jack : Jack,
  John : John
}

Et accédez à ces classes comme vous l'avez mentionné correctement:

var People = require('./People.js');
var JackInstance = new People.Jack();
var JohnInstance = new People.John();
69
Mukesh Sharma

Vous pouvez également le faire sous une forme plus courte, en utilisant assignations de déstructuration (qui sont supportées nativement à partir de Node.js v6.0. ):

// people.js
class Jack {
  // ...
}

class John {
  // ...
}

module.exports = { Jack, John }

Importation:

// index.js
const { Jack, John } = require('./people.js');

Ou même comme ceci si vous voulez des assignations nécessitant un alias:

// index.js
const {
  Jack: personJack, John: personJohn,
} = require('./people.js');

Dans ce dernier cas, personJack et personJohn référenceront vos classes.

Un mot d'avertissement:

La restructuration peut être dangereuse dans le sens où elle est susceptible de générer des erreurs inattendues. Il est relativement facile d'oublier les accolades sur export ou de les inclure accidentellement dans require.

63
Damaged Organic