Node.js不仅适合开发Web应用,其应用范围还广泛至微服务、REST API、工具、物联网,甚至桌面应用。
本文旨在展示如何利用Node.js构建命令行工具CLI。首先,我们将探讨一些用于创建命令行的npm包,然后从零开始构建CLI。
我们开发的命令行工具名为ginit,用于初始化Git仓库。它不仅后台运行git init,还包括其他功能,如允许用户通过交互创建.gitignore文件,并最终提交并推送代码到远端仓库。
可以在GitHub(https://github.com/sssssssh/ginit
)上找到本教程附带的代码。
为什么选择Node.js来构建CLI?首先,如果你正在阅读本文,那么你很可能已经对JavaScript有了深入了解。其次,Node.js的生态系统意味着你可以利用成千上万种npm包来实现各种目的,其中许多都是为了构建强大的CLI而生的。最后,通过npm管理依赖,你可以避免特定系统的包管理工具带来的兼容性问题。
我们将构建一个名为ginit的命令行工具。它实现了git init,但不仅仅只有这个功能。例如,git init会在当前文件夹初始化git仓库,但通常这是将新项目或现有项目关联到Git上的众多重复步骤中的一步。ginit将创建Git仓库,创建远程仓库,然后提供一个交互式向导来创建.gitignore、添加文件并将其推送到远端,从而减少重复劳动。
为了实现这个功能,我们需要使用一些npm包,如chalk、clui、figlet、clear、Readline、Inquirer、minimist等。
首先,在项目中创建一个新的目录(例如ginit),然后创建一个新的package.json文件。接下来,安装项目依赖,并在项目中创建一个index.js文件。
在lib目录中创建file.js模块,实现获取当前目录的方法,并检查文件是否存在。在index.js中,使用这个方法来检查当前目录是否存在git仓库。
接下来,实现用户输入功能,使用Inquirer询问用户GitHub账号和密码。创建一个函数来获取GitHub API的OAuth TOKEN,并使用configstore包保存配置信息。
处理GitHub授权,获取OAuth令牌,并创建一个函数来检查token是否存在。如果不存在,则获取token,并创建一个loading效果来展示进度。
创建一个函数来创建远程仓库,并使用Inquirer询问仓库名称、描述和权限。然后,创建一个.gitignore文件,并使用simple-git库与git交互。
将所有功能串联起来,并创建一个函数来控制获取token的逻辑。最后,将ginit命令全局可用,并更新index.js文件以使ginit命令全局可用。
展望未来,你可以为ginit添加更多功能,如支持Bitbucket、提供默认的.gitignore文件集合、增加其他验证和跳过某些步骤的功能。