2011-09-26 13 views
7

Piszę serwer gier planszowych dla wielu graczy w NodeJS i mam kilka różnych obiektów, takich jak Game, User, Board itp. Obecnie wszystkie te obiekty znajdują się w pojedynczy plik "sever.js", który jest wykonywany przez NodeJS.NodeJS - wiele obiektów podzielonych na wiele plików, ale w tej samej przestrzeni nazw

Gdy mój projekt rośnie, ten pojedynczy plik staje się coraz bardziej zatłoczony i trudny w nawigacji.

Chciałbym podzielić te obiekty na wiele plików js, ale bez potrzeby korzystania z funkcji wymagającej w każdym miejscu.

pragnę kontynuować tworzenie obiektów tak -

game = new Game(); 

a nie to -

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

-

Edit:

Jaki jest prawidłowy sposób NodeJS robiąc rzeczy?

Odpowiedz

7

Cóż, jest kilka drobnych rzeczy, które możesz zrobić.

Po pierwsze, podczas definiowania swoją klasę w innym pliku (być wymagane) zdefiniować module.exports bezpośrednio, tj

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

I wtedy zamiast:

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

można zrobić:

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

Lub, co wolę, to określenie wszystkich wymagań na górze:

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

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

Można by stworzyć jakiś fantazyjny ładowarka który przemierza bezpośrednio i automatycznie wymaga, aby wszystkie pliki JS, ale ja naprawdę nie sądzę, że warto.

+0

Czy włączając je na górze jak ten uważany najlepszych praktyk? Jaki jest zalecany sposób działania NodeJS? – NoPyGod

+3

+1. To (wymagające u góry) jest powszechną praktyką w aplikacjach i bibliotekach Node. –

1

Można załadować je na początku:

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

Jednak ja osobiście nie. Nie mogę powiedzieć, dlaczego nie podoba mi się ten pomysł, ale nie wiem.

+1

Czy jesteś zadowolony z używania wymagającego w każdym miejscu tylko do zrobienia prostego zadania, takiego jak tworzenie obiektu?Chcę robić rzeczy "właściwą drogą", ale nie jestem pewien, jaka jest właściwa droga. – NoPyGod

+0

Widzę twoją sprawę, ale tak naprawdę nigdy nie miałem tego problemu, ponieważ po prostu trzymam wszystko w jednym pliku. Chociaż napisałem kilka rzeczy w węźle Node, to bez wyjątku były to całkiem małe projekty, a po prostu tworzenie zakładek kodu w edytorze było wystarczające, ale widzę, że gdybyś miał do czynienia z bardzo dużą ilością kodu, mogłoby to być nudne. /niemożliwy. – DaveRandom

+0

To naprawdę jest. – AJB

4

Możesz użyć globalnej. w Game.js:

global.Game = function(){}; 

w user.js:

global.User = function(){}; 

w main.js:

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

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

To jest moja ulubiona metoda. Jest to analogiczne do dołączania plików nagłówkowych C++, ale spowoduje to zanieczyszczenie zasięgu globalnego, jeśli używasz modułów o podobnych nazwach. – Vortico

Powiązane problemy