1

我正在尝试使用CoffeeScript为Yeoman开发一个自定义生成器,但我遇到了一个问题。当我在我的类的构造函数中使用该方法时,当我尝试使用 Yeoman 和我的自定义生成器初始化我的项目时,我得到一个警告hookFor must be used within the constructor 。这是我的生成器在 index.coffee 中的代码:hookForGenerator

path = require 'path'
util = require 'util'
yeoman = require '../../../../'
module.exports = class Generator extends yeoman.generators.Base
    constructor: ->
        super()
        @directories = ['controllers', 'helpers', 'models', 'templates', 'views']
        @hookFor 'artefact:controller', args: ['App']
    deploy: ->
        @directory '.', '.'
        @mkdir path.join 'dev', directory for directory in @directories

任何帮助将不胜感激。谢谢。

4

1 回答 1

1

显然,错误来自yeoman-generators/lib/base.js文件中的Yeoman Generators代码。以下是我得出这个结论的方法:

  1. 警告是由在函数中_running设置的变量引起的(第 296 行)truehookFor
  2. run该变量在函数中设置为 true (第 78 行),然后迭代该类Generator的方法(第 81-137 行)
  3. CoffeeScript 中为该类定义的构造函数在Generator迭代期间被调用,因此@hookFor被调用,而_runningis true:警告!
  4. 但是,不应调用构造函数,因为在迭代期间进行了测试以防止它(第 92 行)

    if ( method.constructor === '-' )
    
  5. 但是,在我看来,这个测试应该是:

    if ( method === 'constructor' )
    

黑客可以解决问题。如果我错了,请随时添加评论。

于 2012-10-09T06:19:16.930 回答