在日常的前端开发工作中,我们经常会接触到一些命令行工具,例如nvm
,nrm
,pnpm
,它们都可以通过指令的方式实现强大的功能,例如nvm
可以非常方便的管理nodejs
的版本,用于快速切换不同的nodejs
版本。
既然这些命令行工具如此强大,那为何不自己尝试实现一下类似的工具呢?咱们说干就干!
开始实现
项目结构:
dev
│ - package.json
| - index.js
└ ─ bin
|- cli.js
package.json 中配置 bin 字段。
{
"name": "dev",
"version": "1.0.0",
"description": "开发一个终端工具",
"main": "index.js",
"bin": {
"dev": "./bin/cli.js"
},
"scripts": {
"start": "node index.js",
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "chiko",
"license": "ISC"
}
想要实现一个终端工具,bin
字段是必不可少的,它用于指定npm
包中的可执行脚本的位置,当我们全局安装一个包时,bin
字段定义的脚本会被添加到系统的路径中,使得我们可以在命令行界面的任何位置直接调用这些脚本。
那我们的cli
脚本该如何写呢?
#!/usr/bin/env node
我们需要在该文件的第一行加上这行特殊代码,它的作用就是告诉操作系统应该使用哪个解析器或程序去执行脚本,这行代码的意思就是通过nodejs
去执行。
下面就可以写上自己需要的功能了,这边推荐一个包来快捷的实现指令,那就是commander
。
npm install commander
简单实现一个案例:
#!/usr/bin/env node
const commander = require('commander');
const program = new commander.Command();
program
.option('-s, --say <text>', 'say someting')
program.parse(process.argv);
const options = program.opts();
if (options.say) console.log(`say: ${options.say}`);
对于本地开发来说,想要测试自己写的包也很简单,通过npm link
指令,可以将自己的包链接到自己的全局node_module
目录下,当你修改模块代码时,所有使用该模块的项目都会立即响应这些更改。
在终端测试命令行:
dev -s hello // say: hello
成功输出say: hello
,这样一个简单的命令行工具就完成了。
后话
这里推荐一下本人刚写完的命令行翻译包,支持六个平台的翻译,可以快捷切换平台和语种,现已发布到npm
,可通过npm install -g tlm
下载使用,npm
搜索tlm
即可看详细文档说明。
本项目采用typescript
编写,通过tsc
编译并打包js
文件到npm
,想要学习的可以看github
源码。
链接跳转:多平台命令行翻译包,欢迎大家提出自己的想法!
觉得本项目还不错的,请给我个star
吧!!!