脚手架开发【实战教程】prompts + fs-extra

创建项目

  • 新建文件夹 mycli_demo

  • 在文件夹 mycli_demo 内新建文件 package.json

    {"name": "mycli_demo","version": "1.0.0","bin": {"mycli": "index.js"},"author": "","license": "ISC","description": "","dependencies": {"fs-extra": "^11.3.0","prompts": "^2.4.2"}
    }
    
  • 新建文件 templates\react\package.json

    {"name": "your-project-name","version": "1.0.0","description": "react + ts + vite 项目模板","main": "index.js","scripts": {"dev": "vite"},"keywords": [],"author": "","license": "ISC"
    }
    
  • 新建文件 templates\vue\package.json

    {"name": "your-project-name","version": "1.0.0","description": "vue + ts + vite 项目模板","main": "index.js","scripts": {"dev": "vite"},"keywords": [],"author": "","license": "ISC"
    }
    
  • 新建文件 index.js

    #!/usr/bin/env node// prompts 用于与用户进行交互
    const prompts = require("prompts");// fs-extra 用于文件操作
    const fse = require("fs-extra");// path 用于处理文件路径
    const path = require("path");// 定义项目模板路径
    const templateDir = path.join(__dirname, "templates");// 定义交互问题
    const questions = [{type: "select",name: "projectType",message: "请选择项目类型:",choices: [{ title: "vue", value: "vue" },{ title: "react", value: "react" },],initial: 0,},{type: "text",name: "projectName",message: "请输入项目名称:",validate: (value) => (value.trim() === "" ? "项目名称不能为空" : true),},{type: "select",name: "packageManager",message: "请选择包管理器:",choices: [{ title: "npm", value: "npm" },{ title: "yarn", value: "yarn" },],initial: 0,},
    ];async function createProject() {try {// 发起交互,并获取用户输入const answers = await prompts(questions);// 解析用户输入的项目信息const { projectType, projectName, packageManager } = answers;// 根据用户输入的项目名称,生成新项目目录。  process.cwd() 用于获取当前工作目录的路径const projectDir = path.join(process.cwd(), projectName);// 检查新项目目录是否已存在if (fse.existsSync(projectDir)) {console.error(`项目目录 ${projectDir} 已存在,请选择其他名称。`);return;}// 创建项目目录fse.ensureDirSync(projectDir);// 根据用户选择,获取目标模板路径const templatePath = path.join(templateDir, projectType);// 复制模板目录到目标目录fse.copySync(templatePath, projectDir);// 根据用户选择更新项目配置const packageJsonPath = path.join(projectDir, "package.json");// 读取 package.json 文件const packageJson = fse.readJsonSync(packageJsonPath);// 更新 package.json 中的项目名称packageJson.name = projectName;// 保存更新后的 package.jsonfse.writeJsonSync(packageJsonPath, packageJson, { spaces: 2 });console.log(`项目 ${projectName} 创建成功!`);console.log(`请进入项目目录:cd ${projectName}`);console.log(`使用 ${packageManager} 安装依赖:${packageManager} install`);} catch (error) {if (error.name === "AbortError") {console.log("用户取消了项目创建。");} else {console.error("创建项目时发生错误:", error);}}
    }// 执行创建项目函数
    createProject();
    

安装依赖

pnpm i

或更新到最新版依赖

pnpm i prompts fs-extra

将本地包链接到全局

主要是为了方便本地调试包

npm link --force

此命令会强制将 mycli 链接到全局 node_modules 目录中,同时在全局 bin 目录中根据 package.json 中定义的 bin 字段创建对应的可执行文件
( --force 会强制覆盖已存在的 mycli 链接和可执行文件)

效果预览

命令行中输入 mycli 回车,便会开启交互,最终根据既定模板完成项目的创建。

在这里插入图片描述
在这里插入图片描述

{"name": "reactDemo","version": "1.0.0","description": "react + ts + vite 项目模板","main": "index.js","scripts": {"dev": "vite"},"keywords": [],"author": "","license": "ISC"
}

更多交互命令

参考 prompts 官网 https://www.npmjs.com/package/prompts

脚手架开发的意义和原理

https://blog.csdn.net/weixin_41192489/article/details/125282893

脚手架的系统管理和发布

https://blog.csdn.net/weixin_41192489/article/details/125298121

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/15481.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【大模型】DeepSeek-V3技术报告总结

系列综述: 💞目的:本系列是个人整理为了学习DeepSeek相关知识的,整理期间苛求每个知识点,平衡理解简易度与深入程度。 🥰来源:材料主要源于DeepSeek官方技术报告进行的,每个知识点的…

只需三步!5分钟本地部署deep seek——MAC环境

MAC本地部署deep seek 第一步:下载Ollama第二步:下载deepseek-r1模型第三步:安装谷歌浏览器插件 第一步:下载Ollama 打开此网址:https://ollama.com/,点击下载即可,如果网络比较慢可使用文末百度网盘链接 注:Ollama是…

力扣hot100刷题第一天

哈希 1. 两数之和 题目 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。你可以按任意…

Linux(CentOS)安装 Nginx

CentOS版本:CentOS 7 Nginx版本:1.24.0 两种安装方式: 一、通过 yum 安装,最简单,一键安装,全程无忧。 二、通过编译源码包安装,需具备配置相关操作。 最后附:设置 Nginx 服务开…

项目6:基于大数据校园一卡通数据分析和可视化

1、项目简介 本项目是基于大数据的清华校园卡数据分析系统,通过Hadoop,spark等技术处理校园卡交易、卡号和商户信息数据。系统实现消费类别、男女消费差异、学院消费排行和年级对比等分析,并通过Web后端和可视化前端展示结果。项目运行便捷&…

Django项目中创建app并快速上手(pycharm Windows)

1.打开终端 我选择的是第二个 2.运行命令 python manage.py startapp 名称 例如: python manage.py startapp app01 回车,等待一下,出现app01的文件夹说明创建成功 3.快速上手 1.app注册 增加一行 "app01.apps.App01Config"&#…

使用Docker + Ollama在Ubuntu中部署deepseek

1、安装docker 这里建议用docker来部署,方便简单 安装教程需要自己找详细的,会用到跳过 如果你没有安装 Docker,可以按照以下步骤安装: sudo apt update sudo apt install apt-transport-https ca-certificates curl software-p…

信创领域的PostgreSQL管理员认证

信创产业,全称为信息技术应用创新产业,是中国为应对国际技术竞争、保障信息安全、实现科技自立而重点发展的战略性新兴产业。其核心目标是通过自主研发和生态构建,逐步替代国外信息技术产品,形成自主可控的国产化信息技术体系。 发…

jemalloc的malloc案例来分析GOT表和PLT表有关流程

一、背景 在之前的博客 跟踪jemalloc 5.3.0的第一次malloc的源头原因及jemalloc相关初始化细节拓展-CSDN博客 里,我们分析了在preload jemalloc的库之后,main之前的一次malloc分配(分配72704字节)的源头原因并做了jemalloc的初始…

Centos Ollama + Deepseek-r1+Chatbox运行环境搭建

Centos Ollama Deepseek-r1Chatbox运行环境搭建 内容介绍下载ollama在Ollama运行DeepSeek-r1模型使用chatbox连接ollama api 内容介绍 你好! 这篇文章简单讲述一下如何在linux环境搭建 Ollama Deepseek-r1。并在本地安装的Chatbox中进行远程调用 下载ollama 登…

使用sunshine和moonlight串流时的音频输出问题

设备:电脑和平板串流,把平板当副屏使用 1.如果启用安装steam音频驱动程序,则平板有声,电脑无声,在moonlight端可以设置平板和电脑同时发声,但是有点卡 2.只想电脑发声,平板无声 禁用安装steam…

微信小程序案例2——天气微信小程序(学会绑定数据)

文章目录 一、项目步骤1 创建一个weather项目2 进入index.wxml、index.js、index.wxss文件,清空所有内容,进入App.json,修改导航栏标题为“中国天气网”。3进入index.wxml,进行当天天气情况的界面布局,包括温度、最低温、最高温、天气情况、城市、星期、风行情况,代码如下…

如何在WPS和Word/Excel中直接使用DeepSeek功能

以下是将DeepSeek功能集成到WPS中的详细步骤,无需本地部署模型,直接通过官网连接使用:1. 下载并安装OfficeAI插件 (1)访问OfficeAI插件下载地址:OfficeAI助手 - 免费办公智能AI助手, AI写作,下载…

数字电路-基础逻辑门实验

基础逻辑门是数字电路设计的核心元件,它们执行的是基本的逻辑运算。通过这些基本运算,可以构建出更为复杂的逻辑功能。常见的基础逻辑门包括与门(AND)、或门(OR)、非门(NOT)、异或门…

哪吒闹海!SCI算法+分解组合+四模型原创对比首发!SGMD-FATA-Transformer-LSTM多变量时序预测

哪吒闹海!SCI算法分解组合四模型原创对比首发!SGMD-FATA-Transformer-LSTM多变量时序预测 目录 哪吒闹海!SCI算法分解组合四模型原创对比首发!SGMD-FATA-Transformer-LSTM多变量时序预测效果一览基本介绍程序设计参考资料 效果一览…

C++,STL 迭代器简介:概念、分类、操作

文章目录 引言一、迭代器的基本概念1.1 什么是迭代器?1.2 迭代器的意义二、迭代器的分类2.1 示意图:迭代器能力层级2.2 示例:不同迭代器的操作三、迭代器的常用操作3.1 基本操作3.2 随机访问迭代器专用操作示例代码:随机访问迭代器四、迭代器的通用用法4.1 遍历容器4.2 配合…

EasyExcel 导出合并层级单元格

EasyExcel 导出合并层级单元格 一、案例 案例一 1.相同订单号单元格进行合并 合并结果 案例二 1.相同订单号的单元格进行合并2.相同订单号的总数和总金额进行合并 合并结果 案例三 1.相同订单号的单元格进行合并2.相同订单号的商品分类进行合并3.相同订单号的总数和总金额…

常用的python库-安装与使用

常用的python库函数 yield关键字openslide库openslide对象的常用属性 cv2库numpy库ASAP库-multiresolutionimageinterface库ASAP库的安装ASAP库的使用 concurrent.futures.ThreadPoolExecutorxml.etree.ElementTree库skimage库PIL.Image库 PIL.Image.Imagedetectron2库数据增强…

C++基础系列【8】如何解决编译器报的错误

博主介绍:程序喵大人 35- 资深C/C/Rust/Android/iOS客户端开发10年大厂工作经验嵌入式/人工智能/自动驾驶/音视频/游戏开发入门级选手《C20高级编程》《C23高级编程》等多本书籍著译者更多原创精品文章,首发gzh,见文末👇&#x1f…

程序诗篇里的灵动笔触:指针绘就数据的梦幻蓝图<8>

大家好啊,我是小象٩(๑ω๑)۶ 我的博客:Xiao Xiangζั͡ޓއއ 很高兴见到大家,希望能够和大家一起交流学习,共同进步。 今天我们复习前面学习的指针知识 目录 关于指针数组和数组指针的区别指针数组(Array of Poi…