如何用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处理

    首先我需要拿到windowslinux 的系统回调,使用 linux 中的 sed -n 'p;n;p' 获取输入任何命令的返回值在终端、那么首先考虑shelljs API 单发现 对于 sed 处理的很少,并不能满足我们的需求,但是看到了一个万能函数 shell.exec ,我们用他的回调来接受我们的文本

  • fs 或 fs-extra

    fs-extra 对于 fs 的关系呢 就像是 lodashunderscore 前者封装了后者,并提供了更好的支持,并做到了向下兼容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工具集,可以做一些日常工作的批处理 ,比如以前工作中的场景:多台服务器 负载均衡 查看后端日志是个麻烦事,需要开很多终端,我们可不可以配置好rsassh 合并多个 管道 重定向为一个终端进行查看呢?

feature(flag)

  • 做一个推荐

1.0不够好,也就能个人blog站点用用,分享给别人瞧瞧,我打算下一步2.0发表到我即将完成的 目前技术栈比较主流的 bbs new-bee 上, 顺便推广一波,当然顺便点个 star支持一下也很感激,当然这也是我首次提及此项目,此项目涉及到docker webpack vue spring-boot shell脚本 各种中间件 各种前沿ui库脚手架 未来甚至可能尝试基于docker的微服务小型实践,总之想做的事情真的很多。

关于我

庄文达:全栈开发攻城狮

  • 就是爱学习,我还要刺激大家一起学习?
  • 没事喜欢造造轮子?
  • 写写博客?
  • 录录视频分享?
  • 做一些技术实践?
  • 立一立flag,不过都会还回来的?
  • 目前在写 bbs?

下一篇文章

  • 我会给大家讲述一下全栈工程师的自我修养或者大方向可以说web全栈工程师的自我修养 和需要掌握的技术栈 ,也是分享我这么多年的积累

最后展示一下新玩具吧

下期见

如何用node开发自己的cli工具相关推荐

  1. 【总结】1591- 从入门到精通:使用 TypeScript 开发超强的 CLI 工具

    作为一名开发者,掌握 CLI 工具的开发能力是非常重要的.本文将指导你如何使用 TypeScript 和 CAC 库开发出功能强大的 CLI 工具. 快速入门 首先,需要先安装 Node.js 和 n ...

  2. SDKMAN - 一个用于轻松管理多个软件开发工具包的CLI工具

    转载来源:https://www.ostechnix.com/sdkman-a-cli-tool-to-easily-manage-multiple-software-development-kits ...

  3. Node.js CLI 工具最佳实践

    为什么写这篇文章? 一个糟糕的 CLI 工具会让用户觉得难用,而构建一个成功的 CLI 需要密切关注很多细节,同时需要站在用户的角度,创造良好的用户体验.要做到这些特别不容易. 在这个指南中,我列出了 ...

  4. Node开发项目管理工具 Grunt 对比 Gulp

    转自Gulp vs Grunt 1. Grunt -> Gulp 早些年提到构建工具,难免会让人联想到历史比较悠久的Make,Ant,以及后来为了更方便的构建结构类似的Java项目而出现的Mav ...

  5. 教你如何用node.js开发微信公众号(一)

    内容简介 本文章简单介绍了如何用node.js开发微信公众号.主要内容包括微信公众平台的配置,signature的验证,以及用node.js去处理用户主动发起的行为. 准备工作 开发前需要安装好nod ...

  6. node/js 漏洞_6个可用于检查Node.js中漏洞的工具

    node/js 漏洞 Vulnerabilities can exist in all products. The larger your software grows, the greater th ...

  7. 肝!22款超好用的CLI工具

    作者 | switowski 策划 | 万佳 作者根据多年的终端使用经验,详细介绍了一些实用的 CLI 工具,希望它们能帮读者提高生产力. 前段时间,我写过一篇我最喜欢的 Mac 应用的文章.其实,我 ...

  8. npm 更换插件版本_Node CLI 工具的插件方案探索

    本文作者:徐超颖 CLI 工具作为开发者们亲密无间的好伙伴,996 风雨无阻地陪伴着我们进行日常的开发工作.身为前端开发,你一定也亲自开发过一套属于你自己的 CLI 小工具!如果没有,本文也不会教~ ...

  9. node开发命令行脚本

    前端日常开发中,会遇见各种各样的cli,比如一行命令帮你打包的webpack,一行命令帮你生成vue项目模板的vue-cli,还有创建react项目的create-react-app等等等等.这些工具 ...

最新文章

  1. shell 中长命令的换行处理
  2. Xamarin.iOS真机测试报错
  3. jQuery-DOM
  4. http --- 共享加密(对称加密)的几个概念
  5. web项目的创建和发布
  6. [react] 写一个react的高阶组件并说明你对高阶组件的理解
  7. Matlab绘图--包含各种标示符的输入方法
  8. 作者:佟继周(1976-),女,中国科学院国家空间科学中心研究室副研究员、副主任...
  9. 实体框架 5.0:空间数据类型、性能增强、数据库提升
  10. 大学生转行IT,零基础非计算机专业可以学会吗?
  11. cad常青藤插件_CAD 2020软件安装包+插件大合集+完整视频教程,自学也可以的
  12. Java — InputStream.read(),response.getOutputStream(),OutputStream().write【IO流】
  13. 微信小程序码合成图片
  14. python卡方拟合优度检验_如何理解拟合优度检验 ?
  15. 空间数据平台SDP - 医疗药品门店数字化营销
  16. ContentProvider跨进程通信
  17. 腾达ap设置说明_腾达(Tenda)路由器如何设置AP模式
  18. linux上使用FTP下载远程PTF远程文件
  19. Android在MTP模式下,只显示指定文件夹
  20. mybatis笔记整理

热门文章

  1. Google创始人公开信:AI暖春和黑暗面
  2. SpringBoot+WebSocket实时监控异常
  3. 趣图:老手调试多线程,666
  4. 两难!到底用Apache BeanUtils还是Spring BeanUtils?
  5. 为什么机器学习算法难以优化?一文详解算法优化内部机制
  6. 从0梳理1场时间序列赛事!
  7. 2020年成为机器学习工程师,看这9本书就够了!
  8. 【pandas学习笔记】DataFrame
  9. 实操教程|Pytorch常用损失函数拆解
  10. 华为,再牵手一流大学