2011-09-26 11 views
7

मैं नोडजेएस में एक मल्टीप्लेयर बोर्ड गेम सर्वर लिख रहा हूं, और मेरे पास गेम, उपयोगकर्ता, बोर्ड इत्यादि जैसी कई अलग-अलग वस्तुएं हैं। वर्तमान में, ये सभी ऑब्जेक्ट्स एक में रहती हैं एकल 'sever.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')); 

या, जो मैं चाहता हूं, शीर्ष पर सभी आवश्यकताओं को परिभाषित करना है:

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

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

आप कुछ फैंसी लोडर बना सकते हैं जो सीधे ट्रैवर करता है और स्वचालित रूप से सभी जेएस फाइलों की आवश्यकता होती है, लेकिन मुझे नहीं लगता कि यह इसके लायक है।

+0

उन्हें उस पर विचार किया सबसे अच्छा अभ्यास की तरह शीर्ष पर सहित है? नोडजेएस ने चीजों को करने का अनुशंसित तरीका क्या है? – NoPyGod

+3

+1। यह (शीर्ष पर आवश्यक) नोड ऐप्स और पुस्तकालयों में सामान्य प्रथा है। –

1

आप उन्हें शुरुआत में लोड कर सकते हैं:

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

हालांकि, मैं व्यक्तिगत रूप से नहीं होगा। बिल्कुल नहीं कह सकता कि मुझे विचार पसंद क्यों नहीं है, लेकिन मैं नहीं करता।

+1

क्या आप ऑब्जेक्ट को तत्काल करने जैसे साधारण कार्य करने के लिए बस जगह पर सभी जगहों की आवश्यकता के साथ सामग्री का उपयोग कर रहे हैं?मैं चीजों को "सही रास्ता" करना चाहता हूं, लेकिन मुझे यकीन नहीं है कि सही तरीका क्या है। – NoPyGod

+0

मैं तुम्हारा बिंदु देखता हूं, लेकिन मुझे वास्तव में यह समस्या कभी नहीं मिली है क्योंकि मैं बस एक ही फाइल में सब कुछ रखता हूं। जबकि मैंने नोड में कई चीजें लिखी हैं, लेकिन उनके पास अपवाद के बिना काफी छोटी परियोजनाएं हैं और संपादक में कोड की बिटिंग बुकिंग बिट्स पर्याप्त है, लेकिन मैं देख सकता हूं कि यदि आप बहुत बड़ी मात्रा में कोड से निपट रहे थे तो यह थकाऊ हो सकता है/असंभव। – DaveRandom

+0

यह वास्तव में तरह का है। – AJB

4

आप वैश्विक का उपयोग कर सकते हैं। Game.js में:

global.Game = function(){}; 
User.js में

:

global.User = function(){}; 
main.js में

:

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

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

यह मेरी पसंदीदा विधि है। यह C++ शीर्षलेख फ़ाइलों को शामिल करने के समान है, लेकिन समान नाम वाले मॉड्यूल का उपयोग करते हुए यह आपके वैश्विक दायरे को प्रदूषित करेगा। – Vortico

संबंधित मुद्दे