2011-09-26 31 views
7

Tôi đang viết một máy chủ trò chơi nhiều người chơi trong NodeJS và tôi có một số đối tượng khác nhau như Trò chơi, Người dùng, Ban, v.v. tệp 'sever.js' duy nhất được thực thi bởi NodeJS.NodeJS - nhiều đối tượng được chia thành nhiều tệp nhưng trong cùng một không gian tên

Khi dự án của tôi phát triển, tệp đơn này ngày càng trở nên đông đúc và khó điều hướng.

Điều tôi muốn là chia các đối tượng này thành nhiều tệp js, nhưng không phải sử dụng chức năng yêu cầu trên toàn bộ địa điểm.

Tôi muốn tiếp tục tạo các đối tượng như thế này -

game = new Game(); 

Và không này -

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

-

Edit:

các NodeJS đúng cách là gì làm việc?

Trả lời

7

Vâng, có một vài việc nhỏ bạn có thể làm.

Thứ nhất, khi bạn xác định lớp học của bạn trong tập tin khác (được yêu cầu), bạn xác định module.exports trực tiếp, tức là

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

Và, sau đó thay vì:

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

Bạn có thể làm:

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

Hoặc, điều tôi thích, là xác định tất cả các yêu cầu ở trên cùng:

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

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

Bạn có thể tạo một số trình tải ưa thích di chuyển trực tiếp và tự động yêu cầu tất cả các tệp JS, nhưng tôi thực sự không nghĩ nó đáng giá.

+0

là bao gồm họ ở phía trên như thế thực hành tốt nhất coi? NodeJS đề nghị cách làm việc gì? – NoPyGod

+3

+1. Điều này (yêu cầu ở trên cùng) là thực tế phổ biến trong các ứng dụng và thư viện Node. –

1

Bạn có thể tải chúng ngay từ đầu:

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

Tuy nhiên, cá nhân tôi thì không. Không thể nói chính xác tại sao tôi không thích ý tưởng này, nhưng tôi thì không.

+1

Bạn có nội dung với việc sử dụng yêu cầu tất cả các nơi chỉ để làm một nhiệm vụ đơn giản như instantiating một đối tượng?Tôi muốn làm những điều "đúng cách", nhưng tôi không chắc chắn đúng cách là gì. – NoPyGod

+0

Tôi thấy quan điểm của bạn, nhưng tôi thực sự chưa bao giờ gặp vấn đề này vì tôi chỉ giữ mọi thứ trong một tệp. Trong khi tôi đã viết nhiều thứ trong Node, chúng không có ngoại lệ là các dự án khá nhỏ và chỉ đơn giản là đánh dấu các bit trong trình soạn thảo là đủ, nhưng tôi có thể thấy rằng nếu bạn đang xử lý một khối lượng lớn mã này, /Không thể nào. – DaveRandom

+0

Nó thực sự là loại. – AJB

4

Bạn có thể sử dụng toàn cầu. trong Game.js:

global.Game = function(){}; 

trong User.js:

global.User = function(){}; 

trong main.js:

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

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

Đây là phương pháp yêu thích của tôi. Nó tương tự như bao gồm các tệp tiêu đề C++, nhưng nó sẽ gây ô nhiễm phạm vi toàn cầu của bạn nếu sử dụng các mô-đun có tên tương tự. – Vortico

Các vấn đề liên quan