开篇

在上一篇文章中,给 nue-cli 添加了与用户终端交互的功能,这一次来实现一个拉取版本号的功能。

这个功能的背景是,有时候我们在使用脚手架的时候,不同版本的脚手架可能会有不同的功能,所以用户有可能会根据自己的需求选择不同的版本,所以这里将会实现一个根据用户选择的版本号,拉取对应的版本号的模板。

实现

说到这个拉取版本号的功能,其实就是一个简单的功能,最核心的就是如何获取到 GitHub 上的版本号。

获取 GitHub 上的版本号

继续回到上次 GitHub Api 文档中,找一下与仓库相关获取仓库版本号的接口。

回到 https://docs.github.com/en/rest?apiVersion=2022-11-28 ,在左侧导航栏中找到 Repositories,然后点击 Repositories,找到 List repository tags

点击 List repository tags,找到 GET /repos/{owner}/{repo}/tags 这个 Api,这个 Api 主要作用就是列出指定存储库的标签。

简单解释一下这个请求地址:

  • owner:仓库所属的用户或组织
  • repo:仓库名称

{} 是占位符,需要替换成具体的值,例如我要获取 vue-simple-template 这个仓库的版本号,请求地址就是:https://api.github.com/repos/neo-it6666/vue-simple-template/tags

在浏览器中输入这个地址,看看返回的数据:

发现返回的数据是一个数组,但是是一个空数组,这是因为我这个仓库还没有发布版本号,所以这里就是一个空数组。

发布版本号

在 GitHub 上发布版本号,其实就是在仓库中发布一个 Release,这个 Release 就是一个版本号。

首先进入到仓库中,然后点击 Releases

然后点击 Create a new release 进入到发布版本号的页面:

首先 Create new tag,然后填写版本号,这里我填写的是 v1.0.0

然后填写一下 Write,然后点击 Publish release,这样就发布了一个版本号,然后再次请求 https://api.github.com/repos/neo-it6666/vue-simple-template/tags

这回就返回了一个数组,数组中就是发布的版本号。

获取版本号

接下来就是在代码中获取这个版本号了,一样的利用之前安装好的 axios,进行请求,先上代码:

const getTemplateTags = async (currentTemplateName) => {
const {data} = await axios.get(`https://api.github.com/repos/neo-it6666/${currentTemplateName}/tags`)
return data;
}

首先我单独编写了一个方法 getTemplateTags,这个方法接收一个参数 currentTemplateName,这个参数就是当前用户选择的模板名称,然后通过 axios 请求 GitHub Api,获取到对应仓库的版本号。

代码比较简单,不多讲,接下来就是使用这个方法,获取到版本号,先上代码:

const fetchTemplateTags = await getTemplateTags(template);
const tags = fetchTemplateTags.map((item) => item.name);
console.log(tags);

这里我调用了 getTemplateTags 方法,传入了用户选择的模板名称,然后获取到版本号,然后通过 map 方法取出版本号,最后打印到终端中。

这样就获取到了 GitHub 上的版本号,最后在添加上用户与终端交互的功能,就可以实现一个拉取版本号的功能了,在此之前我发现我下拉的版本号时控制台没有加载效果利用 ora 添加一下,改造 getTemplateTags 方法:

const getTemplateTags = async (currentTemplateName) => {
const spinner = ora('Loading tags...').start();
const {data} = await axios.get(`https://api.github.com/repos/neo-it6666/${currentTemplateName}/tags`)
spinner.succeed('Tags loaded successfully');
return data;
}

这样效果就更好了,然后再添加一个与用户交互让用户选择版本号,一样的玩法利用 inquirer 添加一个选择版本号的功能:

const { version } = await inquirer.prompt({
name: 'version',
type: 'list',
message: 'Please select the version number',
choices: tags
})
console.log(version);

这里要说下,这里的 inquirer.prompt 方法传递的是一个对象之前是直接传递的数组,这里传递的是一个对象,这两种方式在功能上是等价的,都可以实现相同的效果, 区别在于语法和风格:

  1. 数组形式:当你使用数组时,可以更清晰地表示每个提示是一个独立的实体。这种方式在有多个提示或者每个提示需要更复杂的配置时特别有用。
  2. 对象形式:当你只需要一个简单的提示时,使用对象形式可以使代码更简洁。它减少了一些冗余的括号,使得代码看起来更紧凑。

好了别的内容就不多说了,这里就是手撕 Vue-CLI 拉取版本号的功能,下一篇文章再来实现拉取模板的功能。

『手撕Vue-CLI』拉取版本号的更多相关文章

  1. 【Copy攻城狮日志】docker搭建jenkins拉取svn代码打包vue项目部署到nginx

    ↑开局一张图,故事全靠编↑ 前言 打开搜索引擎输入『Copy攻城狮』,发现最新的一条记录已经是去年的4月,意味着我又有一年时间没有再总结成长了.习惯了“温水煮青蛙”的日子,无论是经验水平还是薪资收入, ...

  2. 解决webstorm拉取Vue项目时卡顿,及内存爆满问题

    最近在拉取Vue项目时总是会出现webstorm内存瞬间爆满,导致webstorm卡死,而且,有时在下载完node_modues后webstorm一直处于updating中,为此在网上找了很多方法结果 ...

  3. 从零构建vue项目(一)--搭建node环境,拉取项目模板

    本文是基于vuecli2搭建的项目. 1. 下载安装nodejs     地址:https://nodejs.org/en/download/ 选择安装版windows .msi, 不要选择压缩版 下 ...

  4. Vue CLI 是如何实现的 -- 终端命令行工具篇

    Vue CLI 是一个基于 Vue.js 进行快速开发的完整系统,提供了终端命令行工具.零配置脚手架.插件体系.图形化管理界面等.本文暂且只分析项目初始化部分,也就是终端命令行工具的实现. 0. 用法 ...

  5. vue cli 3

    介绍 Vue CLI 是一个基于 Vue.js 进行快速开发的完整系统 通过 @vue/cli 搭建交互式的项目脚手架. 通过 @vue/cli + @vue/cli-service-global 快 ...

  6. 专访Vue作者尤雨溪:Vue CLI 3.0重构的原因

    1.为什么要对 Vue CLI 进行大规模修改? 尤雨溪认为旧版本的 Vue CLI 本质上只是从 GitHub 拉取模版,这种拉模版的方式有几个问题: (1) 在单个模版里面同时支持太多选项会导致模 ...

  7. vue工具 - vue/cli@3.xx 安装使用流程

    mac安装记得npm前边加sudo 安装脚手架,用于生成目录 npm install -g @vue/cli 安装用于编译单个的.vue文件 npm install -g @vue/cli-servi ...

  8. [转]Vue CLI 3搭建vue+vuex 最全分析

    原文地址:https://my.oschina.net/wangnian/blog/2051369 一.介绍 Vue CLI 是一个基于 Vue.js 进行快速开发的完整系统.有三个组件: CLI:@ ...

  9. Vue CLI 3搭建vue+vuex 最全分析

    一.介绍 Vue CLI 是一个基于 Vue.js 进行快速开发的完整系统.有三个组件: CLI:@vue/cli 全局安装的 npm 包,提供了终端里的vue命令(如:vue create .vue ...

  10. 六. Vue CLI详解

    1. Vue CLI理解 1.1 什么是Vue CLI 如果你只是简单写几个Vue的Demo程序, 那么你不需要Vue CLI,如果你在开发大型项目那么你需要它, 并且必然需要使用Vue CLI. 使 ...

随机推荐

  1. mysql 必知必会整理—数据汇总与分组[七]

    前言 简单整理一下数据汇总与分组 正文 我们经常需要汇总数据而不用把它们实际检索出来,为此MySQL提供了专门的函数.使用这些函数,MySQL查询可用于检索数据,以便分析和报表生成. 这种类型的检索例 ...

  2. jenkins 持续集成和交付——一个构件小栗子前置(三)

    前言 下面介绍构建一个小栗子. 在此之前有个小前提,就是已经安装好了git 服务器,用的是gogs,详细请看外篇. 正文 插件安装 首先你要安装一个git插件. 装完git插件后,我们还得安装一些gi ...

  3. 第五章-for循环的练习

    /* * @Issue: 每个苹果0.8元,第一天买两个苹果,从第二天开始,每天买前一天的两倍,直至购买的苹果数量 * 个数达到不超过100的最大值,编写程序求每天平均花多少钱. * @Author: ...

  4. 鸿蒙HarmonyOS实战-ArkUI组件(Canvas)

    一.Canvas Canvas组件是一种图形渲染组件,它提供了一个画布(canvas),开发者可以在上面绘制各种图形.文本等.Canvas组件通常用于创建游戏.数据可视化等需要动态绘制图形的应用程序. ...

  5. 性能提升 57% ,SMC-R 透明加速 TCP 实战解析 | 龙蜥技术

    ​简介:SMC-R 是如何加速 TCP 应用? 编者按:TCP 协议作为当前使用最为广泛的网络协议,场景遍布移动通信.数据中心等.对于数据中心场景,通过弹性 RDMA 实现高性能网络协议 SMC-R, ...

  6. Delta Lake在Soul的应用实践

    简介: 传统离线数仓模式下,日志入库前首要阶段便是ETL,我们面临如下问题:天级ETL任务耗时久,影响下游依赖的产出时间:凌晨占用资源庞大,任务高峰期抢占大量集群资源:ETL任务稳定性不佳且出错需凌晨 ...

  7. 搜索NLP行业模型和轻量化客户定制

    ​简介:开放搜索NLP行业模型和轻量化客户定制方案,解决减少客户标注成本.完全无标注或少量简单标注的等问题,让搜索领域扩展更易用. 特邀嘉宾: 徐光伟(昆卡)--阿里巴巴算法专家 搜索NLP算法 搜索 ...

  8. 基于Python语言的数据可视化工具

    在数据分析中常用的图表可以使用使用 python语言的 matplotlib 和 seaborn 库选择要显示的可视化对象. 一.Matplotlib Matplotlib 是一个 Python 的 ...

  9. 什么是 objdump 命令

    objdump 是在类 Unix 操作系统上显示关于目标文件的各种信息的命令行程序. 它以一种可阅读的格式让你更多地了解二进制文件可能带有的附加信息. 简单来说,和 IDA 这类软件都可用于反汇编. ...

  10. (数据科学学习手札160)使用miniforge代替miniconda

    本文已收录至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 大家好我是费老师,conda作为Python数据科学领域 ...