背景

在工作过程中,我们常常会从一个项目工程复制代码到一个新的项目,改项目配置信息、删除不必要的代码。

这样做的效率比较低,也挺繁琐,更不易于分享协作。

所以,我们可以制作一个cli工具,用来快速创建一个新项目的脚手架。如vue-cli就是一个非常好用的cli工具。

PS:cli 是一个全局安装的 npm 包。

目标

制作一个cli工具,步骤如下:

1、将我们的工程模板放到Github上。

如果工程模板有很多个,可以新建一个Organizations,统一放置到这里面。我工程模板有很多个,会统一放Organizations下面。

如果工程模板是放在公司gitlab上,则可以新建一个Group来统一管理。

2、定义控制台命令,包含其参数。

参数一般有 -v 显示包版本, -h 显示帮助信息,create 作为创建项目的命令参数。

如vue-cli的创新项目命令是 vue create [name]。

3、创建一个npm包工程,实现以上command功能。

如今Github已有很多cli工具,可以clone一个作为参考模板。

PS:我做的cli工具将在最下面放出链接。

问题

刚开始要做cli工具时,我头脑里就有几个问题。

1、怎么快速获取到输入的命令行参数?

我相信已有好的npm包可以完成这功能,我不想自己再从头做一遍。

2、怎么做选项选择功能、文字输入?

由于我的工程模板会有很多个,就想做个选项功能,创建工程时可以选择其中一个模板。

3、怎么优雅地输出日志?

console.log虽然可以用,但样式不好看,需要区分info、error日志。

方法

1、怎么快速获取到输入的命令行参数?

yargs模块能够解决如何处理命令行参数。

2、怎么做选项选择功能、文字输入?

inquirer模块能够处理命令行交互。

3、怎么优雅地输出日志?

chalk模块解决字符串样式问题。

具体实现步骤

1、获取模板列表

2、设置模板选项

3、获取模板的tag列表

4、设置tag选项

5、设置项目信息输入

6、下载zip_ball,并复制到目标位置

7、修改项目的信息

具体实现代码

 #!/usr/bin/env node

 var yargs = require("yargs");
var info = require("./info.js"); var args = yargs
.command({
command: "create <name>",
desc: "Create a bingolink template.",
builder: {},
handler: function(argv) {
var projectName = argv.name;
//1.获取模板列表
info.getTemplates(function(templates){
//2.设置选项
info.showTemplateList(templates, (templateName) => {
var t = templates.find((template) => {
return template.name == templateName;
});
//3.获取标签列表
info.getTags(t.tagsUrl, (tags) => {
//4.设置选项
info.showTagList(tags, (tagName) => {
var tag = tags.find((tag) => {
return tag.name == tagName;
});
//5.项目信息输入
info.showProjectInputView(projectName, (project) => {
projectName = project.project_name;
//6.下载zip_ball,并复制到目标位置
info.downloadZipball(tag.zipUrl, projectName, () => {
//7.修改项目的信息
info.editProjectInfo(project);
})
})
})
})
})
})
}
})
.version() // Use package.json's version
.help()
.alias({
"h": "help",
"v": "version"
})
.strict(true)
.demandCommand()
.argv;

上面是入口js的代码,虽然有回调地狱,但还算比较清晰。

其他代码就不贴上,可以clone我的工程下来看。

工程地址:https://github.com/codingforme/bingolink-cli

发布npm包

1、npm adduser

在发布npm包前,需要先登录npm。

2、npm publish

在工程的根目录,执行这命令即可。

附录

1、npm adduser可能会出现如下的错误。

出现第一错误时,有人说要在Username前加个~号。

我加了,也确实显示登录成功了,但还是怎么都发布不上,一直显示User Not Found。

所以我重新注册了一个npmjs帐号,然后npm logout,再npm adduser新帐号,才发布成功!!!

本文为原创文章,转载请保留原出处,方便溯源,如有错误地方,谢谢指正。

本文地址 :http://www.cnblogs.com/lovesong/p/10847433.html

从零开始制作cli工具,快速创建项目脚手架的更多相关文章

  1. httprunner_安装及利用脚手架工具快速创建项目

    一.安装httprunner 笔者自己安装的版本为2.5.7 安装命令: pip  install httprunner==2.5.7 二.快速创建目录 hrun --startproject dem ...

  2. 使用aliyun cli工具快速创建云主机

    参考文档: https://help.aliyun.com/document_detail/25484.html?spm=a2c4g.11186623.3.2.b57vQp 步骤 创建AccessID ...

  3. 使用Vue CLI 3快速创建项目

    首先 vue create ant-design-vue-pro 执行命令会显示两个选项,1默认,2自定义 我么选择自定义 选择好自定义的插件回车就等待下安装成功然后进入项目文件夹 cd ant-de ...

  4. vue-cli3.X快速创建项目

    1.安装 Vue CLI 的包名称由 vue-cli 改成了 @vue/cli. 如果你已经全局安装了旧版本的 vue-cli (1.x 或 2.x),你需要先通过以下方式先卸载它: npm unin ...

  5. springBoot(2)---快速创建项目,初解jackson

    快速创建项目,初解jackson 一.快速创建项目 springboot官网提供了工具类自动创建web应用:网址:http://start.spring.io/ 官网页面 1.快速创建一个 选择web ...

  6. maven这些工具负责创建项目,然后maven负责打包好war包扔进tomcat容器,tomcat容器接受的只是jar包

    maven这些工具负责创建项目,然后maven负责打包好war包扔进tomcat容器,tomcat容器接受的只是jar包 2.tomcat不管你什么编译的,也不管你开发工具是什么.Tomcat只接受w ...

  7. SpringBoot——IDEA使用 Spring Initializer快速创建项目【四】

    前言 使用Spring Initializer快速创建项目 步骤 首先肯定是打开我们的IDEA的编辑器呀~ 创建项目 File -> New -> Project Spring Initi ...

  8. vue- Vue-Cli脚手架工具安装 -创建项目-页面开发流程-组件生命周期- -03

    目录 Vue-Cli 项目环境搭建 与 python 基础环境对比 环境搭建 创建启动 vue 项目 命令创建项目(步骤小多) 启动 vue 项目(命令行方式) 启动 vue 项目(pycharm 方 ...

  9. 【HttpRunner v3.x】笔记 ——2. 用脚手架快速创建项目

    环境装好了,相信很多童鞋已经迫不及待的想run起来了,但是面对一个陌生的框架又无从下手.没关系,我们可以用脚手架来快速生成一个httprunner项目. 一.快速生成项目 我们不妨先输入httprun ...

随机推荐

  1. Nginx实现负载均衡时常用的分配服务器策略

    场景 Nginx配置实例-负载均衡实例:平均访问多台服务器: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/103019576 在 ...

  2. 云原生技术之Docker入门

    1. 为什么需要容器? 下图是一个比较传统的软件架构 做过java的同学可能对上图的架构方式比较了解,我们通常会将一个应用程序生成一个war包,放到一个tomcat容器当中并在一台虚拟机(VM)中启动 ...

  3. Androi O Automotive 介绍

    最近由于工作需要对android o 中的 automotive源码进行了深入的学习,现总结如下: Android O Vehicle之架构介绍 Android O Vehicle之Car Servi ...

  4. Win10系统重做

    一.准备工作: 1.电脑(台式电脑.笔记本电脑): 2.U盘(内存大于4G): 3.软碟通(UltraISO):下载地址:https://pan.baidu.com/s/1tpCiIyIwK_7LaL ...

  5. MQ报错2009/2085解决方法

    1.1. 响应2009错误 1.1.1.   涉及协议 MQ,调试回放阶段 1.1.2.   错误信息 完成码2原因为2009 1.1.3.   可能原因 远端MQ连接数不足,拒绝连接 1.1.4.  ...

  6. 面试连环炮系列(八):服务器CPU飙升100%怎么排查

    服务器CPU飙升100%怎么排查 执行"top"命令,查看当前进程CPU占用的实时情况,PID列是进程号,确定是哪个应用程序的问题. 如果是Java应用导致的,怎么定位故障原因 执 ...

  7. Jmeter自动化集成工具Ant的安装

    一.Ant介绍 Apache Ant,是一个将软件编译.测试.部署等步骤联系在一起加以自动化的一个工具,大多用于Java环境中的软件开发.由Apache软件基金会所提供.只要使用过Linux系统的读者 ...

  8. 阿里云服务器搭建web项目小结

    前言 最近恰好有时间,自己搞了个云服务器试着搭建了个网站,遇到了一些问题,通过踩坑也涨了一些经验,遂记录一二,与后来者分享. 正文 1.博主用的阿里云服务器,为什么用它呢?一个是恰逢双十一,有优惠:另 ...

  9. WebShell代码分析溯源(十一)

    WebShell代码分析溯源(十一) 一.一句话变形马样本 <?php $e = $_REQUEST['e'];declare(ticks=1);register_tick_function ( ...

  10. c++多个文件中共用一个全局变量 变量跨文件使用

    原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/12047602.html 虽然很多博客都写过这个了 但是 我还是继续补充的详细一点吧  毕竟很多 ...