每次运行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环境的模块/插件/应用程序的列表。

  • yo
  • yeoman-app
Yeoman系列

1

入门

2

创建Generator

3

Generator运行时上下文(Runtime Context)

4

用户交互

5

可组合性

6

管理依赖

7

使用文件系统

8

管理配置

9

单元测试

10

调试Generator

11

整合Yeoman

11、整合Yeoman相关推荐

  1. Android 11整合Mopria联盟的代码贡献以实现增强的打印功能

    新功能支持从数千个其他应用中进行打印,并提高易用性 加州圣拉蒙市--(美国商业资讯)--为打印和扫描提供通用标准和解决方案的全球非营利性组织Mopria®联盟今天宣布,Android 11将包括该联盟 ...

  2. (转)Spring4.2.5+Hibernate4.3.11+Struts2.3.24整合开发

    http://blog.csdn.net/yerenyuan_pku/article/details/52902851 前面我们已经学会了Spring4.2.5+Hibernate4.3.11+Str ...

  3. (转)Spring4.2.5+Hibernate4.3.11组合开发

    http://blog.csdn.net/yerenyuan_pku/article/details/52887573 搭建和配置Spring与Hibernate整合的环境 今天我们来学习Spring ...

  4. phpcms v9 支持 php7,phpcms v9 整合 phpwind 8.7

    一.整合说明 该整合程序支持整合phpcms v9 & phpwind 8.x系列产品 (下面是整合phpwind8.7的事例) 整合是以phpcms为服务端 整合内容包含:会员统一注册,统一 ...

  5. ssm项目集成ftp_SSM开发框架实例(struts+spring+springmvc)

    概述 可以直接下载导入Myeclipse直接使用. 项目基于Myeclipse/jdk1.8 项目基于Maven做依赖管理 项目基于Mysql5.6做数据库管理 功能 1.Spring boot 1. ...

  6. Spring 多数据源事务配置问题

    2009-12-22 在SpringSide 3 中,白衣提供的预先配置好的环境非常有利于用户进行快速开发,但是同时也会为扩展带来一些困难.最直接的例子就是关于在项目中使用多个数据源的问题,似乎 很难 ...

  7. springboot listener_Springboot 全套面试提升宝典,为金三银四冲刺

    简介: Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配 ...

  8. MyBatis缓存机制学习

    与Hibernate一样,MyBatis 同样提供了一级缓存和二级缓存的支持. 一级缓存: 基于PerpetualCache 的 HashMap本地缓存,其存储作用域为 Session,当 Sessi ...

  9. Redis从入门到集群分布式实践

    Redis 分布式实践 一. Redis 初识 1.1 Redis 导学 Redis有哪些特点? 高性能的key-value服务器 多种数据结构 丰富的功能 高可用分布式支持 适合人群: 初学者 进阶 ...

最新文章

  1. 官方文档,才是正途-docker-compose
  2. 自制pyBoard的I2C实验,应用MicroPython
  3. vc++6.0的工作空间/工作区是什么?工程 文件 工作区什么区别?
  4. (chap4 IP协议) IP协议
  5. 不带头节点的单链表如何头插(多图易懂)
  6. .Netcore 2.0 Ocelot Api网关教程(番外篇)- Ocelot v13.x升级
  7. 【转】刨根究底字符编码之十——Unicode字符集的字符编码方式
  8. 【留言板 Message Board】
  9. 摆摊神器五菱荣光爆红后,上汽大通房车又成夜市新晋网红
  10. 关于matlab匿名函数,求导
  11. 电子合同助力“在线教育”高效发展
  12. 基于单片机波形发生器设计(c语言),基于51单片机的波形发生器的设计
  13. linux删除mysql用户_如何删除MySQL用户帐户
  14. win7无法查看win10工作组计算机,解决:win7系统工作组计算机无法访问我的计算机(图文)...
  15. ffmpeg 合并下载m3u8流媒体
  16. Git配置本地分支、远程分支、合并分支、撤销合并分支
  17. HOE 33187,HOE33187,HOE-33187,23623-08-7用于染色DNA的蓝色荧光染料家族的一部分
  18. matlab中circle函数_MATLAB如何用自带函数画圆
  19. morris算法(莫里斯遍历) [数据结构与算法]
  20. html自动播放avi视频,使用HTML5 video标签的一系列问题

热门文章

  1. 分子晶体有哪些最新发表的毕业论文呢?
  2. 贝克制药冲刺上市:资产负债率高,抗乙肝制剂产品收入和占比下滑
  3. oracle查询cpu占用率高,ORACLE CPU过高的sql查询
  4. DMA中的四种控制信号:DRQ、DACK、HRQ、HLDA
  5. 浅谈竞赛中的部分树(块、点、链)【长期更新】
  6. rabbitMQ学习心得
  7. IE浏览器内容加载完成,进度条不结束解决
  8. 禁用Nouveau,安装Linux Nvidia 显卡驱动
  9. Python篮球弹跳
  10. react的SPA实践