U盘PE| w764位旗舰版下载 | U盘装win7系统 | U盘启动 |win7pe | win10下载 |加入收藏土豆PE官网U盘PE,U盘装win7系统,win7pe,U盘启动,U盘装系统,w764位旗舰版下载站!
当前位置:主页 > 帮助中心 > 土豆PE使用教程 >

UMI 插件 registerGenerator 粗略分析

来源:http://www.tudoupe.com时间:2022-02-28

阅读 registerGenerator UMI 插件

一、前言

在使用 UMI 插件开发命令行功能时,需要使用registerGenerator 这个 API。 UMI 官网 对此做了介绍。

umi-next里,发现对registerGenerator进行了升级,使用起来更加简洁明了。

那么就来熟悉下registerGenerator的前后使用差异。

二、umi3 下的 registerGenerator

请添加图片描述

registerGenerator开放两个属性:

  • key: 命令行关键字。
  • Generator: 自定义的功能实现。

在命令行中键入umi generate <type> <name> [options]。会通过监听对应的key执行Generator下的内容。

以下是Generator内置提供的方法

请添加图片描述

有了这些方法,能够异步写入模板、写入文件夹、执行提示等操作。

例如想要在业务项目的某个位置创建页面,或者是创建一整个项目,可以通过以下代码来实现:

三、umi-next 下的 registerGenerator

1、使用能力

Generator替换成以下属性:

  • name: 在执行命令行时显示的功能名称
  • description: 对功能的详细描述
  • type: 1)、enable在执行命令前会先调用checkEnable方法来校验是否满足自定义的环境,若不满足会结束命令,并给出错误提示。2)、generate直接生成
  • checkEnable:typeenable时需声明,用来检查是否开启
  • fn: 执行命令行的功能,并开放出apigenerateFileinstallDepsupdatePackageJSON等辅助功能和属性让提高用户体验。

开发者和用户在使用上述的 API 时会对功能描述更加清晰,fn: () => {}开放出来的辅助函数更加便捷。来看以下例子:

2、两者的比较

升级后的registerGenerator增加了命令行执行前的检测能力,减少了误执行命令带来的风险。

fn的函数内置了重复的代码,使代码更加轻便,让开发者集中精力在功能代码上。针对重点功能抛出了辅助函数.

generateFile来说,原有的逻辑需要开发者自行判断路径的类型,copy的功能分为copyTplcopyDirectory。而generateFile对其进行整合,内置了路径类型判断和copy功能。

接下来,就抽丝剥茧般的阅读下这块代码。

3、Generator底层逻辑

/core/src/service/pluginApi.ts#L81中得知,最终所执行的是Generator类,并将全部参数传递过去。通过this.service.generators[key] = new Generator()保证了每个命令行互不影响,允许多条命令同时执行。

继续点击Generator进入到generator.ts文件,在这个文件下看到了registerGenerator的所有类型定义。

registerGenerator能力的使用,是因为执行了umi generate xxx(简写umi g xxx)。

命令的建立在umi里是使用registerCommand,所以可以通过全局搜索name: 'generate'的代码位置。

不出意外,我们能在/core/src/service/generatePlugin.ts下找到其核心逻辑。

从代码中能够看到type === enable会异步进行checkEnable的校验,若为generate则直接执行。并且在fn()函数中抛出了generateFileinstallDepsupdatePackageJSON等函数和属性。

Generator至此告一段落。

4、generateFile底层逻辑

从两个umi版本中可以看出大部分使用registerGenerator的场景都在使用copy能力。因此,generateFile算是核心逻辑。

packages/utils/src/BaseGenerator就是整个页面生成器的核心。

./BaseGenerator.ts下对path参数做了两层判断。

如果是文件夹类型,则使用copyDirectory进行文件夹的复制。

如果文件后缀为.tpl则使用copyTpl实现模版复制。

剩余内容则通过文件拷贝的功能用fs.copyFileSync(path, absTarget)来实现。

Copyright © 2012-2014 Www.tudoupe.Com. 土豆启动 版权所有 意见建议:tdsky@tudoupe.com

土豆系统,土豆PE,win7系统下载,win7 64位旗舰版下载,u盘启动,u盘装系统,win10下载,win10正式版下载,win10 RTM正式版下载,win8下载,电脑蓝屏,IE11修复,网络受限,4K对齐,双系统,隐藏分区,系统安装不了,U盘装系统,笔记本装系统,台式机装系统,diskgenius运用,GHSOT装系统,U盘修复,U盘技巧,U盘速度,U盘不能格式化,U盘复制发生错误,U盘加密,U盘选购,开机黑屏,蓝屏,进不了系统,上不了网,打不开程序,点击无反应,系统设置,PE个性化,PE添加网络,PE维护系统

点击这里给我发消息