2011-09-26 12 views
7

NodeJSにマルチプレイヤーボードゲームサーバーを作成しています。ゲーム、ユーザー、ボードなどいくつかのオブジェクトがあります。 NodeJSによって実行される単一の 'sever.js'ファイル。NodeJS - 複数のオブジェクトが複数のファイルにまたがって同じ名前空間に分割されています

私のプロジェクトが成長するにつれて、この1つのファイルはますます混雑し、ナビゲートが難しくなっています。

これらのオブジェクトを複数のjsファイルに分割する必要がありますが、必要な機能をすべての場所で使用する必要はありません。

は、私はこのようなオブジェクトの作成を続行したい -

game = new Game(); 

としないこの -

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

-

編集:正しいNodeJSの方法は何

物事をする?

答えて

7

あなたにできることはいくつかあります。

あなたは別のファイルにクラスを定義まず、(必要とされることが)あなたが直接module.exportsを定義する、すなわち

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

そして、その後、代わりに:

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

あなたが行うことができます。

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

または、私が好むのは、すべての要件を上部に定義することです。

すべてのJSファイルが自動的に横断して自動的に横断するようなファンシーローダーを作成することはできますが、実際にはそれが価値があるとは思われません。

+0

はと考え、ベストプラクティスのようなトップでそれらを含めていますか?物事を行うNodeJSの推奨方法は何ですか? – NoPyGod

+3

+1。これは(上に必要な)ノードのアプリとライブラリの一般的な習慣です。 –

1

あなたは最初にそれらをロードすることができます

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

しかし、私は個人的ではないだろう。なぜ私がそのアイデアが気に入らないのかはっきり言うことはできませんが、私はしません。

+1

オブジェクトをインスタンス化するなどの単純なタスクを実行するだけで、すべての場所でrequireを使用することに満足していますか?私は「正しい方法」をしたいと思っていますが、正しい方法は何か分かりません。 – NoPyGod

+0

私はあなたの要点を見ていますが、私はすべてを1つのファイルに保存しているので、実際にこの問題は発生しませんでした。私はNodeにいくつかのことを書いていますが、例外なく非常に小さなプロジェクトがあり、エディタでコードのブックマークをブックマークするだけで十分でしたが、非常に大量のコードを扱っていると面倒です/不可能。 – DaveRandom

+0

それは本当に種類です。 – AJB

4

グローバルを使用できます。 Game.jsで :user.jsの中

global.Game = function(){}; 

:main.jsで

global.User = function(){}; 

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

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

これは私の好きな方法です。これはC++ヘッダーファイルのインクルードに似ていますが、同様の名前のモジュールを使用している場合はグローバルスコープを汚染します。 – Vortico

関連する問題