如何用node开发自己的cli工具
如何用node开发自己的cli工具
灵感
写这个工具的灵感以及场景源于youtube的一次闲聊
- github 地址
- blog首发
使用场景
原本我们写博客展示shell,例如:安装运转docker,一键部署脚本,等一些终端操作,我们需要进行大量的截图展示给用户,为什么不能更加直观方便的生成一个网页呢?
如何使用
- 安装
sudo npm install share_shell -g
- 帮助
tw --help #1.0暂时用这个命令,没想到好的缩写
- 查看版本
tw --version || tw -v
- 使用
# tw share "要展示的命令" -p "路径"# 例如想 docker ps -a 秀一波你的docker容器tw share "docker ps -a" 或 tw s "docker ps -a" # 默认生成 share_you_shell.html 到当前目录 # 还可以指定路径tw share "ls -all" -p /usr/local/html/share_shell.html #自动创建文件,存在默认覆盖
如何基于node制作自己的跨平台工具
① 制作前的思考
- 涉及的技术栈,以及技术选型
- shelljs 进行CMD处理
首先我需要拿到
windows
或linux
的系统回调,使用linux
中的sed -n 'p;n;p'
获取输入任何命令的返回值在终端、那么首先考虑shelljs API
单发现 对于sed
处理的很少,并不能满足我们的需求,但是看到了一个万能函数shell.exec
,我们用他的回调来接受我们的文本 - fs 或 fs-extra
fs-extra
对于fs
的关系呢 就像是lodash
和underscore
前者封装了后者,并提供了更好的支持,并做到了向下兼容API
很不容易,我们主要用它生成一个简单的html
文件来分享我们的shell
- commander
我们选用
commander
来制作 类似git
docker
风格的cli
命令行工具 , 因为没有其他更好的选择 - 其他
我个人用了
lodash
string
进行了偷懒操作,缺点是增加了两个依赖,有点是快~
② 写代码前的准备工作
- 初始化
npm init
初始化生成标准的package.json
文件,包含你的git
信息,发布npm
能找到你的描述,联系方式,版本号等。 - 新建bin文件夹
这是一个规范,可执行工具的老家。新建一个
tw.js
,因为是打印机风格的,所以瞎起了个名字 取typeWriter
首字母
③ 先定义一下基本的终端命令
编辑
tw.js
var program = require('commander');var appInfo = require('../package.json');program.version(appInfo.version) // 拿到 package.json 你定义的版本 program.command('share <shell>') // 定义你的command.alias('s') // 缩写.description('Enter the "shell" you want to convert and include it in \" \" ') // 描述.option("-p, --path <path>", "Enter you html path , default ./share_you_shell.html") // option 字命令,可以无限多个.action(function (cmd, options) {// 拿到cli输入的option子命令,没有可以默认var path = typeof options.path == 'string' ? options.path : "./share_you_shell.html"// 执行你的操作 ↓// 执行cli的commandexec_shell.exec(cmd, (res) => {// 回调的res根据格式转为数组var res_arr = S(res).lines()// 针对数组你的逻辑处理一波数组let str = format.toTypedFormat([cmd].concat(res_arr))// 异步制作你的文件,传入路径file.mkfile(str, path)})}).on('--help', function () {// --help commander 有默认处理,一般这部分无事可做,你还想干啥?});program.parse(process.argv);
输入 tw -- help
大概是这样的
- 完善代码
完善一下你各单位的逻辑,当然你也可以选择写的更加优雅。
- 预先注意的问题
我这个项目我会预先想到:保留
shell的转译符
使用pre
原型输入\n \t
,处理一下scroll
保持底部,最后随便找一个类似typewriterjs 开源库,按照他的风格生成一下就可以
④ 测试一下
- 写完了?
node /bin/tw.js share "tree -L 2" -p xxx
测试一下,(你们可能没有安装tree
,换任何可执行的其他命令,长ping
除外) 全局测一下
我们最终是要发布到
npm
上的,可以让用户-g
安装,自己应该先测试一下,首先:确保你在
package.json
文件中添加了bin
节点。并指明了主程序,像我这样。"bin": {"tw": "./bin/tw.js"},
- 运行
sudo npm install . -g
执行
tw share "tree -L 2" -p xxx/xxx/xx.html
如果生成了`xx.html`,恭喜你,可以发布了
④如何发布到
npm
进行装逼项目已经准备好了,接下来可以着手发布了。首先npm上注册账号,别忘了去邮箱验证。然后输入:
npm adduser
接下来会以问答的形式向你了解你的用户名、密码以及公开的邮箱,之后输入
npm publish
- 注意!!
发布npm
的源别是cnpm
淘宝源,否则401
哦然后看到进度条走,之后组件发布成功,可以到
npm
上搜索自己的包了。npm install share_shell
(取决于你package.json
当时填写的项目名)
甚至你cnpm install share_shell
也能下载,淘宝同步真他妈快。 npm i share_shell -g
全世界所有
用户都可以下载了
⑤ 引发的思考
- 思考
node
既然为我们提供了如此简洁的方式,那么我们可以做一些更有意义的事情,比如 为我们的开源项目 做一个 部署
、 发布
、 打包
、 测试
、CLI
工具集,可以做一些日常工作的批处理
,比如以前工作中的场景:多台服务器 负载均衡
查看后端日志是个麻烦事,需要开很多终端,我们可不可以配置好rsa
或 ssh
合并多个 管道
重定向为一个终端进行查看呢?
feature(flag)
- 做一个推荐
1.0
不够好,也就能个人blog
站点用用,分享给别人瞧瞧,我打算下一步2.0
发表到我即将完成的 目前技术栈比较主流的 bbs
new-bee 上, 顺便推广一波,当然顺便点个 star支持一下也很感激,当然这也是我首次提及此项目,此项目涉及到docker
webpack
vue
spring-boot
shell脚本
各种中间件
各种前沿ui库脚手架
未来甚至可能尝试基于docker
的微服务小型实践,总之想做的事情真的很多。
关于我
庄文达:全栈开发攻城狮
- 就是爱学习,我还要刺激大家一起学习?
- 没事喜欢造造轮子?
- 写写博客?
- 录录视频分享?
- 做一些技术实践?
- 立一立
flag
,不过都会还回来的? - 目前在写 bbs?
下一篇文章
- 我会给大家讲述一下
全栈工程师的自我修养
或者大方向可以说web全栈工程师的自我修养
和需要掌握的技术栈
,也是分享我这么多年的积累
最后展示一下新玩具吧
下期见
如何用node开发自己的cli工具相关推荐
- 【总结】1591- 从入门到精通:使用 TypeScript 开发超强的 CLI 工具
作为一名开发者,掌握 CLI 工具的开发能力是非常重要的.本文将指导你如何使用 TypeScript 和 CAC 库开发出功能强大的 CLI 工具. 快速入门 首先,需要先安装 Node.js 和 n ...
- SDKMAN - 一个用于轻松管理多个软件开发工具包的CLI工具
转载来源:https://www.ostechnix.com/sdkman-a-cli-tool-to-easily-manage-multiple-software-development-kits ...
- Node.js CLI 工具最佳实践
为什么写这篇文章? 一个糟糕的 CLI 工具会让用户觉得难用,而构建一个成功的 CLI 需要密切关注很多细节,同时需要站在用户的角度,创造良好的用户体验.要做到这些特别不容易. 在这个指南中,我列出了 ...
- Node开发项目管理工具 Grunt 对比 Gulp
转自Gulp vs Grunt 1. Grunt -> Gulp 早些年提到构建工具,难免会让人联想到历史比较悠久的Make,Ant,以及后来为了更方便的构建结构类似的Java项目而出现的Mav ...
- 教你如何用node.js开发微信公众号(一)
内容简介 本文章简单介绍了如何用node.js开发微信公众号.主要内容包括微信公众平台的配置,signature的验证,以及用node.js去处理用户主动发起的行为. 准备工作 开发前需要安装好nod ...
- node/js 漏洞_6个可用于检查Node.js中漏洞的工具
node/js 漏洞 Vulnerabilities can exist in all products. The larger your software grows, the greater th ...
- 肝!22款超好用的CLI工具
作者 | switowski 策划 | 万佳 作者根据多年的终端使用经验,详细介绍了一些实用的 CLI 工具,希望它们能帮读者提高生产力. 前段时间,我写过一篇我最喜欢的 Mac 应用的文章.其实,我 ...
- npm 更换插件版本_Node CLI 工具的插件方案探索
本文作者:徐超颖 CLI 工具作为开发者们亲密无间的好伙伴,996 风雨无阻地陪伴着我们进行日常的开发工作.身为前端开发,你一定也亲自开发过一套属于你自己的 CLI 小工具!如果没有,本文也不会教~ ...
- node开发命令行脚本
前端日常开发中,会遇见各种各样的cli,比如一行命令帮你打包的webpack,一行命令帮你生成vue项目模板的vue-cli,还有创建react项目的create-react-app等等等等.这些工具 ...
最新文章
- shell 中长命令的换行处理
- Xamarin.iOS真机测试报错
- jQuery-DOM
- http --- 共享加密(对称加密)的几个概念
- web项目的创建和发布
- [react] 写一个react的高阶组件并说明你对高阶组件的理解
- Matlab绘图--包含各种标示符的输入方法
- 作者:佟继周(1976-),女,中国科学院国家空间科学中心研究室副研究员、副主任...
- 实体框架 5.0:空间数据类型、性能增强、数据库提升
- 大学生转行IT,零基础非计算机专业可以学会吗?
- cad常青藤插件_CAD 2020软件安装包+插件大合集+完整视频教程,自学也可以的
- Java — InputStream.read(),response.getOutputStream(),OutputStream().write【IO流】
- 微信小程序码合成图片
- python卡方拟合优度检验_如何理解拟合优度检验 ?
- 空间数据平台SDP - 医疗药品门店数字化营销
- ContentProvider跨进程通信
- 腾达ap设置说明_腾达(Tenda)路由器如何设置AP模式
- linux上使用FTP下载远程PTF远程文件
- Android在MTP模式下,只显示指定文件夹
- mybatis笔记整理