文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
下载项目模板
根据上一步选择的项目模板:
- 生成缓存目录
- 利用 npm api 接口获取下载路径
- 下载模板至缓存目录
// ./downloadTemplate.js
import path from "node:path";
import fse from "fs-extra";
import ora from "ora";
import { execa } from "execa";
import { pathExistsSync } from "path-exists";
import { log, printErrorLog } from "@oweqian/utils";
/**
* 下载的文件夹下需要安装 node_modules 目录,否则直接使用 npm install 无法下载成功
*/
function getCacheDir(targetPath) {
return path.resolve(targetPath, "node_modules");
}
function makeCacheDir(targetPath) {
const cacheDir = getCacheDir(targetPath);
// 判断文件夹是否存在
if (!pathExistsSync(cacheDir)) {
// 创建文件夹
fse.mkdirpSync(cacheDir);
}
}
async function downloadAddTemplate(targetPath, selectedTemplate) {
const { npmName, version } = selectedTemplate;
const installCommand = "npm";
const installArgs = ["install", `${npmName}@${version}`];
const cwd = targetPath;
log.verbose("installArgs", installArgs);
log.verbose("cwd", cwd);
await execa(installCommand, installArgs, { cwd });
}
async function downloadTemplate(selectedTemplate) {
const { targetPath, template } = selectedTemplate;
makeCacheDir(targetPath);
// 下载进度显示
const spinner = ora("正在下载模板...").start();
try {
// 下载模板至缓存目录
await downloadAddTemplate(targetPath, template);
log.success("下载模板成功");
} catch (e) {
printErrorLog(e);
} finally {
spinner.stop();
}
}
export default downloadTemplate;
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论