2012-01-04 4 views
0

Я изо всех сил, чтобы понять, что я здесь отсутствует:node.js module.export

FILE: Sprite.js 
function Sprite() { 
} 

Sprite.prototype.move = function() { 
} 

module.exports = Sprite; 

FILE: Ship.js 
function Ship() { 
} 

Ship.prototype = new Sprite(); 

Ship.prototype.enable = function() { 
} 

FILE: Server.js 
var util = require('util'), 
io = require('socket.io'), 
Sprite = require('./sprite.js'), 
Ship = require('./ship.js'); 

var boo = new Ship(Sprite); 

Вне Node.js это работает отлично. Однако в Node.js он не распознает Sprite в файле судна. Я пробовал использовать module.export = Sprite в конце спрайт-файла без успеха.

Приветствия

ответ

4

Экспорт Sprite в FILE: Sprite.js так:

function Sprite() { 
} 

Sprite.prototype.move = function() { 
} 
exports.Sprite = Sprite; 

Тогда внутри FILE: Ship.js (это хитрая часть вас не хватает) использовать require требовать Sprite так:

var Sprite = require('/path/to/Sprite'); 
function Ship() { 
} 

Ship.prototype = new Sprite(); 

Ship.prototype.enable = function() { 
} 

Если модуль экспорта-л, если вы whant использовать его, то вам нужно требовать его (в модуле вы пытаетесь играть с ним, а не в главном модуле) не так ли ?, как иначе nodejs будет знать, где находится «класс» корабля? more info here


Редактировать, увидеть эту работу (все файлы должны находиться в том же каталоге или вам необходимо изменить путь требует)

sprite.js Файл:

var Sprite = function() { 
} 
Sprite.prototype.move = function() { 
    console.log('move'); 
} 
module.exports = Sprite; 

ship.js Файл:

var Sprite = require('./sprite'); 
function Ship() { 
} 

Ship.prototype = new Sprite(); 

Ship.prototype.enable = function() { 
    console.log('enable'); 
} 

module.exports = Ship; 

Файл main.js:

var Ship = require('./ship'); 

var boo = new Ship(); 

boo.move(); 
boo.enable(); 

Запустите пример использования node main.js и вы должны увидеть:

C:\testrequire>node main.js 
move 
enable 
+0

Хорошо, если я использовал require() в файле Sprite на своем собственном, он все еще говорит, что спрайт не Если я использую require() в обоих спрайтах и ​​на сервере, он говорит: «Невозможно установить свойство перемещения неопределенного». –

+0

Вам нужно сделать shure, что вы правильно экспортируете конструктор Sprite (используйте console.log), затем в Ship Ship импортировать его с помощью req uire. –

+0

Woops Я лгу. Положите запрос спрайта в Sprite по ошибке. Итак, новая проблема ... та же строка - вызов нового Sprite() теперь вызывает ошибку «объект не является функцией». Код точно так же, как вы его сейчас написали. –

1

Проблема в том, что вы не включают module.exports = Sprite; в конце файла Sprite.js. Заметьте, что я писал экспорт, а не экспорт, так что опечатка, должно быть, была проблемой.

+0

Это была опечатка здесь только попробовал это, как написано в сообщении, не повезло. :(«Sprite не определен» - строка 5 - (бит = новый Sprite()) –

+0

Вы уверены, что сервер и спрайт-файлы находятся на одном уровне? Убедитесь, что файл Sprite.js не находится внутри какая-то другая папка по ошибке – alessioalex

+0

Yup они определенно все там. См. ниже. Он работает до некоторой степени, потому что он включает файл корабля в порядке. Они работают индивидуально, просто не объединены, как указано выше. –

Смежные вопросы