11、整合Yeoman

每次运行Generator时,实际上都是在使用yeoman环境。 该环境是与任何UI组件分离的基础系统,并且可以由任何工具抽象化。 当运行yo时,基本上只是在核心Yeoman环境之上运行终端UI外观。

11.1 基础

需要知道的第一件事是环境系统包含在yeoman-environment软件包中。 可以通过运行以下命令进行安装:

npm install --save yeoman-environment

该模块提供了检索已安装的Generator,注册和运行Generator的方法。它还提供了Generator正在使用的用户界面适配器。提供了完整的API文档(可用方法的简要清单。)

11.2 使用 yeoman-environment

简单使用的例子

让我们从简单的例子开始,我们在探讨更深层次的话题之前就开始了“yeoman-environment ”的使用。

在此示例中,假设npm想要通过npm init命令来封装package.json。 阅读文档的其他页面,已经知道如何创建Generator。因此,假设我们已经有一个generator-npm。 我们将看到如何调用它。

第一步是实例化一个新的环境实例。

var yeoman = require('yeoman-environment');
var env = yeoman.createEnv();

第二步,我们要注册一个generator-npm,以便以后使用。 有两个选择:

// 方法一:
// Here we register a generator based on its path. Providing the namespace
// is optional.
env.register(require.resolve('generator-npm'), 'npm:app');

// 方法二:
// Or you can provide a generator constructor. Doing so, you need to provide
// a namespace manually
var GeneratorNPM = generators.Base.extend(/* put your methods in here */);
env.registerStub(GeneratorNPM, 'npm:app');

请注意,您可以根据需要注册任意数量的Generator。 已注册的Generator仅在整个环境中可用(例如,允许可组合性)。

至此,您的环境已准备就绪,可以运行npm:app了。

// In its simplest form
env.run('npm:app', done);

// Or passing arguments and options
env.run('npm:app some-name', { 'skip-install': true }, done);

只需要将此代码放在bin可运行文件中,就可以运行Yeoman生成器,而无需使用yo。

查找安装的Generator

如果希望提供对用户计算机上安装的每个Yeoman生成器的访问权限,该怎么办?那么,需要执行用户磁盘的查找。

env.lookup(function () {
  env.run('angular');
});

在Yeoman完成搜索已安装的生成器后,Environment#lookup() 会调用一个回调。 找到的每个生成器都将在环境中注册。

如果名称空间冲突,本地生成器将覆盖全局生成器。

获取有关注册Generator的数据

调用Environment#getGeneratorsMeta() 将返回一个对象,该对象描述查找任务注册的元数据。

每个对象键都是一个生成器名称空间,值对象包含以下键:

  • resolved: generator的解析路径
  • namespace: generator的命名空间

例如:

{
  "webapp:app": {
    "resolved": "/usr/lib/node_modules/generator-webapp/app/index.js",
    "namespace": "webapp:app"
  }
}

注意:使用#registerStub() 注册的生成器的解析值将为“未知”。

11.3 提供自定义的用户接口(User Interface)

Yeoman使用适配器作为抽象层,以允许IDE,代码编辑器等轻松提供运行生成器所需的用户界面。

适配器是负责处理与用户的所有交互的对象。 如果要提供与传统命令行不同的交互模型,则必须编写自己的适配器。 与用户交互的每种方法都通过此适配器(主要是:提示,日志记录和差异)。

默认情况下,Yeoman提供一个terminal。 测试助手会提供一个测试适配器,可以模拟提示并静音输出。 可以将它们用作自己的实现的参考。

要安装适配器,请使用yeoman.createEnv(args,opts,adapter)的第三个参数。

适配器至少应提供三种方法:

Adapter#prompt()

它提供了问答功能(例如,当您开始时,会向用户提示一系列可能的操作)。

它的签名和行为遵循Inquirer.js的规定。

当生成器调用this.prompt时,该调用最终由适配器处理。

Adapter#diff()

在遇到冲突并且用户要求新旧文件之间进行区分时在内部调用(两个文件的内容均作为参数传递)。

Adapter#log()

它既是用于通用输出的函数,又是对象。 有关提供的方法的完整列表,请参见lib/util/log.js

11.4 Example implementations

这是使用yeoman环境的模块/插件/应用程序的列表。

Yeoman系列

1

入门

2

创建Generator

3

Generator运行时上下文(Runtime Context)

4

用户交互

5

可组合性

6

管理依赖

7

使用文件系统

8

管理配置

9

单元测试

10

调试Generator

11

整合Yeoman

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值