通过交互式命令从github拉取项目模板并创建新项目
参考文档
- Node.js 命令行程序开发教程
- download-git-repo包从远程(GitHub, GitLab, Bitbucket)拉取文件到本地
- commander.js包 在命令行中显示
- Ora 在控制台显示当前加载状态的
- shelljs 模块重新包装了 child_process,调用系统命令
- yargs 获取命令行参数
- chalk 控制控制台输出文字的颜色
- NodeJs交互式命令行工具inquirer
1、为什么要学习这个
看vue-cli可以用交互式的命令来生成一个项目感觉很好玩,所以我也来学学如何做。
2、我要实现什么功能
通过在命令行交互式输入项目名、版本号、选择模板地址后远程(github/gitlab)拉取代码到本地并创建项目.
3、什么都不懂,如何开始
搜索到了一篇Node.js 命令行程序开发教程,瞬间就有了方向。
4、具体做什么
- 像vue-cli那样输入命令 vue create hello-world就能开始执行交互程序。
- 交互式命令行
- 远程拉取项目到本地
- 修改package.json文件中的name和版本号
5、怎么做
像vue-cli那样输入命令 vue create hello-world就能开始执行交互程序
从Node.js 命令行程序开发教程-可执行脚本中学到, 可以在package.json文件中的bin下面设置命令,然后通过npm link就可将命令加入到环境变量中,像下面这样配置 运行zwcli就会执行"bin/create-zw-template"脚本。相当于执行node bin/create-zw-template(记得npm link, npm unlink是用来设置刚才的删除环境变量的)
"bin": {"zwcli": "bin/create-zw-template" },
交互式命令行
使用NodeJs交互式命令行工具inquirer来实现交互式命令。 - 首先编写问题 - 获取问答结果
const questions = [{type: 'input', // type为答题的类型 name: 'projectName', // 本题的key,待会获取answers时通过这个key获取valuemessage: 'projectName:', // 提示语validate (val) {if(!val) { // 验证一下输入是否正确return '请输入文件名';}if(fs.existsSync(val)) { // 判断文件是否存在return '文件已存在';}else {return true;};} },{type: 'input',name: 'version',message: 'verson(1.0.0):',default: '1.0.0',validate (val) {return true;} },{type: 'input',name: 'repository',message: 'repository(zwfun/zw-vue-cli):',default: 'zwfun/zw-vue-cli' }];inquirer.prompt(questions).then(answers => {// 获取答案const version = answers.version;const projectName = answers.projectName;const repository = answers.repository;spinner.start();spinner.color = 'green';downloadTemplate({ repository, version, projectName });});
获取到答案后,就从远程拉取代码下来
远程拉取代码我们选用download-git-repo包从远程(GitHub, GitLab, Bitbucket)拉取文件到本地
为了更好的用户体验我们需要引入Ora 在控制台显示当前加载状态的,来让加载过程更直观好像点
/*** @description: 下载模板* @param {type} * @return: */ const downloadTemplate = function({ repository, version, projectName }) {// repository模板地址 projectName项目名称 // clone 是否是克隆download(repository, projectName, function (err) {console.log(err ? '模板加载错误' : '模板加载结束');if(err !== 'Error') {editFile({ version, projectName });}}) };
拉取代码后,修改package.json文件
使用node自带的api就行
const editFile = function({ version, projectName }) {// 读取文件fs.readFile(`${process.cwd()}/${projectName}/package.json`, (err, data) => {if (err) throw err;// 获取json数据并修改项目名称和版本号let _data = JSON.parse(data.toString())_data.name = projectName_data.version = versionlet str = JSON.stringify(_data, null, 4);// 写入文件fs.writeFile(`${process.cwd()}/${projectName}/package.json`, str, function (err) {if (err) throw err;})spinner.succeed();}); };
6、上代码
github.com/zwfun/zw-cl…
7、使用姿势
- 全局安装npm i zw-vue-cli -g
- 在项目目录下运行命令zwcli
- 根据提示输入项目名称和版本号和模板地址即可
通过交互式命令从github拉取项目模板并创建新项目相关推荐
- 虚幻4-初识蓝图“创建新项目及设置自己的游戏模式“
创建新的项目,在创建新项目类型时选择游戏,因为并不需要预设的一些选项所以这里一般是选用游戏的项目选项 在选模板内可以看到官方一些预设的内容包,这里我们自己创建用空白,什么包都不要 不启用新手包与禁用光 ...
- idea怎么更改推到github的路径_IDEA 拉取、上传、更新 项目到 Gitee+GitHub_超详细超简单版...
注:本人使用的idea是最新版(2019.1.2),要是其他的版本的不要惊慌〜,基本上都一样,没有什么太大的差别的 首先我要说一下,拉取项目分两个,一个,你就没有项目,拉取仓库的整个项目,而另一种的, ...
- java 实现自动生成部署文档_jenkins的部署、实现自动拉取gitlab仓库代码、实现项目中代码自动部署以及项目关联触发......
jenkins主机内存和gitlab主机内存最好配置4G及以上,防止各自的web端打不开 1.配置JDK环境 1)jdk解压到此目录 [root@localhost src]# pwd /usr/lo ...
- 使用git拉取阿里云code托管的项目中的指定分支
1. 注册阿里云(略) 2. 下载git并配置 打开Git Bash工具, 配置git的user.name和user.email, 分别对应阿里云的账户名和邮箱: git config --globa ...
- linux 从github拉取更新_关于拉取请求
注:在处理拉取请求时,请记住: 如果操作的是共享仓库型号,建议对拉取请求使用主题分支. 从任何分支或提交都可发送拉取请求,但如果需要更新提议的更改,则可使用主题分支推送跟进提交. 在推送提交到拉取请求 ...
- git拉取远程分支并创建本地分支
一.查看远程分支 使用如下git命令查看所有远程分支: git branch -r 1 二.拉取远程分支并创建本地分支 方法一 使用如下命令: git checkout -b 本地分支名x origi ...
- git拉取远程分支并创建本地分支和Git中从远程的分支获取最新的版本到本地
git拉取远程分支并创建本地分支 一.查看远程分支 使用如下Git命令查看所有远程分支: git branch -r 二.拉取远程分支并创建本地分支 方法一 使用如下命令: git checkout ...
- Git - 拉取远程分支并创建本地分支
一.查看远程分支 使用如下git命令查看所有远程分支 git branch -r 查看远程和本地所有分支 git branch -a 查看本地分支 git branch 在输出结果中,前面带* 的是当 ...
- idea使用svn拉取源码,创建分支,合并分支教程
svn拉取源码,创建分支,合并分支教程 最近对svn的分支使用比较感兴趣了,花时间研究了一下,分享给大家: 此文章记录了idea使用svn的过程:包括拉取源码.建立分支.切换分支.合并分支等常用操作. ...
最新文章
- java安装 环境配置
- 【消息中间件】Spring整合RabbitMQ
- 是什么狙杀了ERP实施成功?
- XML—— 验证XML文档
- epoll的再次认识
- PDF组件 Aspose.Pdf V17.6发布 | 新增单元格文档旋转功能
- 超全必读!事件抽取综述(上)
- eclipse下properties配置文件中文乱码解决
- Windows安装SSH
- 如何利用卡诺云系统管理早教机构?昆明收银系统还有此妙用!
- 计算机常用英语大全 (中英文对照)
- 用Unity的GetSpectrumData方法识别钢琴曲中的钢琴琴键
- JavaScript九宫格数独生成算法
- ffmepg处理10bit 和8bit yuv总结
- 欧几里得(Euclid)算法
- 软件硕士和计算机硕士,详解软件工程硕士和计算机硕士区别
- 禾穗HERS | 职场新人第一定律
- 我的第一款(ban)产(cheng)品(pin)——铛铛打卡
- 嵌入式系统python开发_嵌组词_嵌的拼音含义_组词造句解释_嵌字的组词
- 心理正常与异常的区分_正常心理与异常心理的判别标准