- Published on
写一个基于Node的命令行工具
- Authors

- Name
- 薯仔
- @Henry_Yangs
2019年,NodeJS已经发布10年了,并且它可以做的事情是越来越多,从web后端到爬虫,从客户端应用到操作系统,可以说真是印证了那句:
凡是可以用JavaScript重写的项目必然都会被用JavaScript重写。
而这一切的原因,正是因为NodeJS把JavaScript从浏览器中释放了出来。基于此,我们可以操作I/O、调用系统接口等等。而在现代前端项目中,我们需要各种工具帮助我们更方便地开发,因此出现了npm来方便开发者管理自己的Node包。那么,到底应该如何构建一个自己的基于NodeJS的命令行工具呢?很明显,网上太多类似的文章了,这里就只简单说一下吧。
手动构建
我们只需要简单的三步就可以构建一个最简单的命令行工具:
第一步
在我们的项目根目录中的package.json增加如下代码:
{
"main": "index.js", // npm init会默认生成这一句
"bin": {
"cmd-tool-cli": "./bin/index.js"
}
}
第二步
在根目录中新增index.js
第三步
在根目录中新增bin/index.js
这样就完成了一个最基础的命令行工具的搭建。其中最重要的就是package.json中增加的bin字段,作用是指明命令行中使用命令时对应的执行文件。还有一点需要注意的是在bin/index.js中的最开始一定要加上
#!/usr/bin/env node
这是用来告诉系统,用node来执行该文件。
项目工程化
作为一个之后要开源的命令行工具,我们的工程必须做好工程化的各个方面的工作。比如eslint校验、babel转义、commit message规范、版本更新规范、git使用等等内容。
光是构建一个项目都会觉得有很多事情要做,而且这些工程化的内容是和项目无关的。所以我们为什么不把它们抽离出来,使用一个工具自动生成呢?
自动构建
cmd-tool-cli
所以,终于可以推荐五个月前写的一个小工具cmd-tool-cli -- 一个用来生成命令行工具的脚手架,可以帮助开发者一键生成一个支持命令行工具开发的目录结构。它生成的结构如下:
├── .eslintignore
├── .eslintrc
├── .gitignore
├── README.md
├── node_modules
├── bin
│ └── index.js
├── commitlint.config.js
├── index.js
├── lib
│ └── index.js
├── package-lock.json
└── package.json
同时自带
1.git初始化
2.npm初始化
3.eslint安装
4.babel转义
5.githook钩子回调的工具husky、仅校验提交的文件内容lint-staged的安装
6.规范版本更新信息的standard-version的安装
7.规范commit message的工具commitlint的安装
8.当然,还有最重要的支持终端对话的工具commander的安装
除了commander,其它的工具都是作为开发依赖安装的。
如何使用
npm i cmd-tool-cli -g
mkdir dir_path
cd dir_path
cmd-tool-cli init
由于当前该工具还处于Beta版,所以仍然有一些功能、性能、甚至是用户体验的问题需要修改。
如果在命令行中输入
cmd-tool-cli -h
可以发现工具提供了如下选项:
-o, --output [path] Directory of output
--no-git Do not initialize with git
--no-dep Do not install any dependency
-o可以指定安装路径
--no-git可以忽略git安装
--no-dep可以忽略所有依赖包的安装
总结
至此,一个自动化生成基于NodeJS命令行工具的脚手架就完成了。点击阅读原文可以看到该工具在github上的源码。如果你有任何的意见和建议,请随时在github上提PR~