参考文档

  • 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拉取项目模板并创建新项目相关推荐

  1. 虚幻4-初识蓝图“创建新项目及设置自己的游戏模式“

    创建新的项目,在创建新项目类型时选择游戏,因为并不需要预设的一些选项所以这里一般是选用游戏的项目选项 在选模板内可以看到官方一些预设的内容包,这里我们自己创建用空白,什么包都不要 不启用新手包与禁用光 ...

  2. idea怎么更改推到github的路径_IDEA 拉取、上传、更新 项目到 Gitee+GitHub_超详细超简单版...

    注:本人使用的idea是最新版(2019.1.2),要是其他的版本的不要惊慌〜,基本上都一样,没有什么太大的差别的 首先我要说一下,拉取项目分两个,一个,你就没有项目,拉取仓库的整个项目,而另一种的, ...

  3. java 实现自动生成部署文档_jenkins的部署、实现自动拉取gitlab仓库代码、实现项目中代码自动部署以及项目关联触发......

    jenkins主机内存和gitlab主机内存最好配置4G及以上,防止各自的web端打不开 1.配置JDK环境 1)jdk解压到此目录 [root@localhost src]# pwd /usr/lo ...

  4. 使用git拉取阿里云code托管的项目中的指定分支

    1. 注册阿里云(略) 2. 下载git并配置 打开Git Bash工具, 配置git的user.name和user.email, 分别对应阿里云的账户名和邮箱: git config --globa ...

  5. linux 从github拉取更新_关于拉取请求

    注:在处理拉取请求时,请记住: 如果操作的是共享仓库型号,建议对拉取请求使用主题分支. 从任何分支或提交都可发送拉取请求,但如果需要更新提议的更改,则可使用主题分支推送跟进提交. 在推送提交到拉取请求 ...

  6. git拉取远程分支并创建本地分支

    一.查看远程分支 使用如下git命令查看所有远程分支: git branch -r 1 二.拉取远程分支并创建本地分支 方法一 使用如下命令: git checkout -b 本地分支名x origi ...

  7. git拉取远程分支并创建本地分支和Git中从远程的分支获取最新的版本到本地

    git拉取远程分支并创建本地分支 一.查看远程分支 使用如下Git命令查看所有远程分支: git branch -r 二.拉取远程分支并创建本地分支 方法一 使用如下命令: git checkout ...

  8. Git - 拉取远程分支并创建本地分支

    一.查看远程分支 使用如下git命令查看所有远程分支 git branch -r 查看远程和本地所有分支 git branch -a 查看本地分支 git branch 在输出结果中,前面带* 的是当 ...

  9. idea使用svn拉取源码,创建分支,合并分支教程

    svn拉取源码,创建分支,合并分支教程 最近对svn的分支使用比较感兴趣了,花时间研究了一下,分享给大家: 此文章记录了idea使用svn的过程:包括拉取源码.建立分支.切换分支.合并分支等常用操作. ...

最新文章

  1. java安装 环境配置
  2. 【消息中间件】Spring整合RabbitMQ
  3. 是什么狙杀了ERP实施成功?
  4. XML—— 验证XML文档
  5. epoll的再次认识
  6. PDF组件 Aspose.Pdf V17.6发布 | 新增单元格文档旋转功能
  7. 超全必读!事件抽取综述(上)
  8. eclipse下properties配置文件中文乱码解决
  9. Windows安装SSH
  10. 如何利用卡诺云系统管理早教机构?昆明收银系统还有此妙用!
  11. 计算机常用英语大全 (中英文对照)
  12. 用Unity的GetSpectrumData方法识别钢琴曲中的钢琴琴键
  13. JavaScript九宫格数独生成算法
  14. ffmepg处理10bit 和8bit yuv总结
  15. 欧几里得(Euclid)算法
  16. 软件硕士和计算机硕士,详解软件工程硕士和计算机硕士区别
  17. 禾穗HERS | 职场新人第一定律
  18. 我的第一款(ban)产(cheng)品(pin)——铛铛打卡
  19. 嵌入式系统python开发_嵌组词_嵌的拼音含义_组词造句解释_嵌字的组词
  20. 心理正常与异常的区分_正常心理与异常心理的判别标准

热门文章

  1. Linux系统编程1:基础篇之Linux中使用率最高的一些命令
  2. 100万并发连接服务器笔记之1M并发连接目标达成
  3. windows服务编写原理(下)
  4. 蓝桥杯-算法提高-种树
  5. Qt:Qt实现飞秋拦截助手—介绍
  6. python语法学习—实现猜拳游戏
  7. MySql 5.6.36 64位绿色版安装
  8. MyBatis3系列__05查询补充resultMap与resultType区别
  9. IDEA引入外部jar包的方法
  10. Element ui select同时获取value和label的值