2011-09-26 12 views
7

Escribo un servidor de juegos de tablero multijugador en NodeJS, y tengo varios objetos diferentes como Juego, Usuario, Tablero, etc. Actualmente, todos estos objetos residen en un único archivo 'sever.js' que es ejecutado por NodeJS.NodeJS: múltiples objetos divididos en varios archivos pero en el mismo espacio de nombres

A medida que mi proyecto crece, este único archivo se está volviendo cada vez más abarrotado y difícil de navegar.

Lo que me gustaría es dividir estos objetos en varios archivos js, pero sin tener que usar la función require por todos lados.

deseo continuar la creación de objetos como este -

game = new Game(); 

Y no esta -

game = new (require('game')).Game() 

-

Editar:

Cuál es la forma correcta de NodeJS ¿haciendo cosas?

Respuesta

7

Bueno, hay algunas cosas pequeñas que puede hacer.

En primer lugar, cuando se define la clase en otro archivo (que se requiera) se define module.exports directamente, es decir

module.exports = function Game() {...}; 

Y, a continuación, en lugar de:

game = new (require('game')).Game() 

que puede hacer:

game = new (require('game')); 

O, lo que prefiero, es definir todos los requisitos en la parte superior:

var Game = require('game'), 
    User = require('user'); 

// Use them: 
new Game(); 
new User(); 

podría crear algún cargador de fantasía que atraviesa la directa y automáticamente requiere que todos los archivos JS, pero realmente no creo que vale la pena.

+0

ellos está incluyendo en la parte superior como la mejor práctica en cuenta? ¿Cuál es la forma recomendada por NodeJS de hacer las cosas? – NoPyGod

+3

+1. Esto (requerir en la parte superior) es una práctica común en las aplicaciones y bibliotecas de Nodo. –

1

Puede cargarlos al principio:

var Game = require('game').Game; 
// Do a bunch of stuff 
var game = new Game(); 

Sin embargo, yo personalmente no lo haría. No puedo decir exactamente por qué no me gusta la idea, pero no es así.

+1

¿Estás contento con el uso? ¿Necesitas por todas partes para hacer una tarea simple como crear instancias de un objeto?Quiero hacer las cosas de la "manera correcta", pero no estoy seguro de cuál es la forma correcta. – NoPyGod

+0

Veo su punto, pero en realidad nunca he tenido este problema porque simplemente guardo todo en un solo archivo. Si bien he escrito varias cosas en Node, sin excepción han sido proyectos bastante pequeños y simplemente ha sido suficiente marcar los bits de código en el editor, pero puedo ver que si se tratara de un gran volumen de código, esto podría volverse tedioso. /imposible. – DaveRandom

+0

Realmente es así. – AJB

4

Puede usar global. en Game.js:

global.Game = function(){}; 

en user.js:

global.User = function(){}; 

en main.js:

require('Game.js'); 
require('User.js'); 

var game = new Game(); 
var user = new User(); 
+0

Este es mi método favorito. Es análogo incluir archivos de encabezado C++, pero contaminará su ámbito global si usa módulos con nombres similares. – Vortico

Cuestiones relacionadas