开篇 经上篇文章的介绍,实现了获取下载目录地址,接下来实现下载指定模板的功能。 背景 通过很多章节过后,已经可以拿到模板名称,模板版本号,下载目录地址,这些信息都是为了下载指定模板做准备的。 实现 如何从 GitHub 下载模板 可以借助 download-git-repo 这个库来下载 GitHu
经过上一篇文章的介绍,我们已经实现了获取下载目录地址的功能,接下来我们将着手实现下载指定模板的功能。
通过前面的章节,我们已经能够获取模板名称、模板版本号以及下载目录地址,这些信息都为下载指定模板做好了准备。
接下来,我们将介绍如何从GitHub下载模板。
我们可以使用
download-git-repo
这个库来下载GitHub上的模板。在npm官网搜索这个库,我们可以找到官方介绍并进行安装:
npm install download-git-repo
安装完成后,在工程中引入这个库:
// 导入 download-git-repo,用于下载模板
const downloadGitRepo = require('download-git-repo');
然后将之前获取的下载路径也导入进来:
// 导入 downloadDirPath,用于获取下载路径
const { downloadDirPath } = require('./const');
基本工作准备完成,现在我们需要学习如何使用这个库。在官方示例中,我们发现了一个使用HTTP的示例:
我们发现回调是API的方式,但我们想要使用Promise的方式。因此,我们需要将回调函数API方式转换为Promise方式。
为了实现这一点,我们需要使用Node.js的内置模块
util
,这个模块可以将回调函数转换为Promise函数。具体使用方法如下:
// 导入 util 模块
const { promisify } = require('util');
然后将
downloadGitRepo
方法转换为Promise方法:
// 导入 download-git-repo,用于下载模板
const downloadGitRepo = promisify(require('download-git-repo'));
这样就将
downloadGitRepo
方法转换为Promise方法了,接下来就可以使用Promise方法来下载模板了。
下载指定模板的方法很简单,只需要调用
downloadGitRepo
方法,传入两个参数,第一个参数是GitHub上的模板地址,第二个参数是下载到本地的路径。
在官方的options介绍中有提供详解:
我们这里采用的是HTTP方式,具体代码如下:
const downloadTemplate = async (templateName, version) => {
// https://github.com/kevva/download#options
// 组织机构的名称/模板名称#版本号
// 1.拼接模板在github上的地址
let url = `neo-it6666/${templateName`;
if (version) {
url += `#${version}`;
}
// 2.拼接存储下载好的模板的路径
const downloadPath = `${downloadDirPath}\\${templateName}`;
await downloadGitRepo(url, downloadPath);
return downloadPath;
}
我们单独封装了一个函数
downloadTemplate
,这个函数接收两个参数,第一个参数是模板名称,第二个参数是版本号,然后拼接GitHub上的模板地址,最后调用
downloadGitRepo
方法,将模板下载到本地。
最后使用这个函数,在
create
指令主流程中调用:
const destPath = waitLoading('downloading template...', downloadTemplate)(template, version)
console.log(destPath)
这样就实现了下载指定模板的功能。来测试一下,首先在终端中输入指令:
nue-cli create test
可以看到已经下载成功了,然后再去用户目录中查看:
可以看到已经下载成功了,这样就实现了下载指定模板的功能。
如果您觉得文章对您有所帮助,欢迎您点赞、评论、转发,也欢迎您关注我的公众号『BNTang』,我会在公众号中分享更多的技术文章。
小编推荐阅读