开头

这篇就有点好玩了,讲的是怎么和用户交互。

用户交互

输出信息

直接this.log()来输出信息。用console.log()也可以,没看出有什么区别。

module.exports = generators.Base.extend({
  myAction: function () {
    this.log('Something has gone wrong!');
  }
});

填写

yeoman使用了Inquirer.js作为这个功能的模块。注意prompting这个函数名是固定的。下面的代码就是让用户确认一下项目的名称。

module.exports = generators.Base.extend({
  prompting: function () {
    var done = this.async();
    this.prompt({
      type    : 'input',
      name    : 'name',
      message : 'Your project name',
      default : this.appname 
    }, function (answers) {
      this.log(answers.name);
      done();
    }.bind(this));
  }
})

Inquirer.js除此之外还有其他的类型,最好看看文档,里面也有运行的效果。

用户默认

这里提供了一个不错的功能,就是把这个默认值给设置为上一次的值,就是记住上一次。这个属性是yeoman做的扩展。

this.prompt({
  type    : 'input',
  name    : 'username',
  message : 'What\'s your Github username',
  store   : true
}, callback);

参数

用户输入这个命令的时候,脚手架就会获取到这个命令。

yo webapp my-project

我们用generator.argument()来读取这个参数

这个是栗子。有个地方注意一下。就是参数和选项的处理都是放在构造函数里的。

module.exports = generators.Base.extend({
  
  constructor: function () {
    generators.Base.apply(this, arguments);

    // 这样在运行命令的时候就必须要有这个参数,不然会报错
    this.argument('appname', { type: String, required: true });
    
    // 取出来
    this.log(this.appname);
  }
});

对参数有这么几个配置选项。

  • desc 描述

  • required 是否必填

  • optional 这个我没搞懂

  • type 类型StringNumberArrayObject

  • defaults 默认值

  • banner 会显示在使用手册里

这里的配置,在命令行里输入yo limi --help,就可以看到。

选项

选项就是加了--的那个。

yo webapp --coffee

用法和参数差不多。

module.exports = generators.Base.extend({

  constructor: function () {
    generators.Base.apply(this, arguments);

    // 从命令行获取 `--coffee`
    this.option('coffee');
    
    // 取出来
    this.log(this.options.coffee);
  }
});
  • desc 描述

  • type 类型

  • defaults 默认值

  • hide 是否从help中隐藏

结尾

除此之外还有其他的API,可以去看看文档。


limichange
4.2k 声望74 粉丝

本人已经不再这里玩了,


引用和评论

0 条评论