2015-10-21 4 views
2

Я получаю различные результаты с module.exports и был бы признателен за то, что кто-то помог мне укрепить очевидное отверстие, насколько мне известно.Различные результаты с использованием Node.js 'module.exports в Yeoman

Из следующего кода я получил результат, указанный ниже.

var generators = require('yeoman-generator'); 

var MyBase = generators.Base.extend({ 
    helper: function() { 
     console.log('this is a helper method'); 
    } 
}); 

module.exports = MyBase.extend({ 
    method1: function() { 
     console.log('method 1 just ran'); 
    } 
}); 

Результат:

method 1 just ran 

Но если я помещаю module.exports на отдельной строке, и назначить MyBase к нему, я получаю следующий результат. Вот код:

var generators = require('yeoman-generator'); 

var MyBase = generators.Base.extend({ 
    helper: function() { 
     console.log('this is a helper method'); 
    } 
}); 

MyBase.extend({ 
    method1: function() { 
     console.log('method 1 just ran'); 
    } 
}); 

module.exports = MyBase 

Результат:

this is a helper method 

Что вызывает различие в выходах?

+0

возможно .extend возвращает новый объект вместо изменения старого на месте? –

+0

@JonahWilliams Это возможно. Но я думал, что цель «продлить» состояла в том, чтобы ** добавить ** к функциональности расширяемого объекта, а не перезаписать его. Нет? – Ben

+0

Если это так, то расширение базы будет перезаписывать его –

ответ

1

Я не смог полностью воспроизвести вашу проблему, но проблема почти наверняка заключается в том, что вызов .extend на генераторе возвращает новый генератор с текущими и расширенными свойствами.

var generators = require('yeoman-generator'); 

var MyBase = generators.Base.extend({ 
    helper: function() { 
    console.log('this is a helper method'); 
    } 
}); 

// Capture the output of the .extend function 
var MyBase2 = MyBase.extend({ 
    method1: function() { 
    console.log('method 1 just ran'); 
    } 
}); 

module.exports = MyBase2 

В качестве альтернативы, вы можете просто определить несколько свойств в один присест

var MyBase = generators.Base.extend({ 
    helper: function() { 
    console.log('this is a helper method'); 
    }, 
    method1: function() { 
    console.log('method 1 just ran'); 
    } 
}); 
+0

Ваше решение работает. Но я пытаюсь понять дыру в моих знаниях о том, как работает «module.exports», применительно к описанному выше сценарию. – Ben

+1

module.exports - это всего лишь объект и требует просто втягивания в этот объект. Поэтому в случае № 1 выше вы установите его равным выходу функции MyBase.extend. поэтому расширенный объект импортируется. http://www.sitepoint.com/understanding-module-exports-exports-node-js/ –

+0

Правильно, но почему 'MyBase.extend()' не вызывает 'method1' для запуска во втором примере кода в моем вопросе выше? Это то, что я действительно пытаюсь понять. – Ben

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