在 Yeoman 中使用 Node.js' module.exports 的不同结果

Different results using Node.js' module.exports in Yeoman

我收到了与 module.exports 不同的结果,非常感谢有人帮助我弥补我知识中的明显漏洞。

从下面的代码中,我收到下面列出的结果。

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

导致输出差异的原因是什么?

我无法完全重现您的问题,但问题几乎可以肯定是在生成器上调用 .extend returns 具有当前属性和扩展属性的新生成器这一事实。

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');
  }
});