资讯专栏INFORMATION COLUMN

如何用node开发自己的cli工具

pkwenda / 1002人阅读

摘要:新建文件夹这是一个规范,可执行工具的老家。然后输入接下来会以问答的形式向你了解你的用户名密码以及公开的邮箱,之后输入注意发布的源别是淘宝源,否则哦然后看到进度条走,之后组件发布成功,可以到上搜索自己的包了。

如何用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 ") // 定义你的command

    .alias("s") // 缩写

    .description("Enter the "shell" you want to convert and include it in " "  ") // 描述

    .option("-p, --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的command
        exec_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 原型输入 ,处理一下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的微服务小型实践,总之想做的事情真的很多。

关于我 庄文达:全栈开发攻城狮

就是爱学习,我还要刺激大家一起学习

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/113682.html

相关文章

  • 何用node开发自己cli工具

    摘要:新建文件夹这是一个规范,可执行工具的老家。然后输入接下来会以问答的形式向你了解你的用户名密码以及公开的邮箱,之后输入注意发布的源别是淘宝源,否则哦然后看到进度条走,之后组件发布成功,可以到上搜索自己的包了。 如何用node开发自己的cli工具 灵感 写这个工具的灵感以及场景源于youtube的一次闲聊 github 地址 blog首发 showImg(https://segment...

    Bmob 评论0 收藏0
  • 何用node开发自己cli工具

    摘要:新建文件夹这是一个规范,可执行工具的老家。然后输入接下来会以问答的形式向你了解你的用户名密码以及公开的邮箱,之后输入注意发布的源别是淘宝源,否则哦然后看到进度条走,之后组件发布成功,可以到上搜索自己的包了。 如何用node开发自己的cli工具 灵感 写这个工具的灵感以及场景源于youtube的一次闲聊 github 地址 blog首发 showImg(https://segment...

    Raaabbit 评论0 收藏0
  • 何用 React Native 创建一个iOS APP?

    摘要:下面,我们可以尝试用创建一个在我们开始之前,我建议你可以在里先下载的代码框架。在任何时候做本教程时你可能会遇到一个红色屏幕模拟器,可以检查错误消息。如果你做过开发或用过层叠样式表,在此之前这应该是熟悉的。 诚然,React Native 结合了 Web 应用和 Native 应用的优势,可以使用 JavaScript 来开发 iOS 和 Android 原生应用。在 JavaScrip...

    cyrils 评论0 收藏0
  • vue+webpack+scss+jade(pug)环境搭建

    摘要:标签声明转载须经本人同意这篇博客就聊一聊如何用搭建的环境,以及拓展了下如何在搭建好的环境中使用以及,废话不多说,直接进入主题。第三步补充,依赖扩展现在,我们搭建的环境并不支持,语法,我们需要再加工一下配置。 标签:vue,webpack,jade,scss声明:转载须经本人同意这篇博客就聊一聊如何用webpack搭建vue2.0的环境,以及拓展了下如何在搭建好的环境中使用scss以及p...

    GraphQuery 评论0 收藏0
  • 《从零构建前后分离web项目》实战 -5分钟快速构建炒鸡规范VUE项目骨架

    摘要:可以使用或来安装我用来重新尝试一次对速度表示不理想的可以尝试淘宝的不要过度依赖中可以写成放哪都行,可以写成可以写成看到这个画面,安装完成了。 初步搭建脚手架 Tips 任何不错的开源项目都有 project-cli 脚手架、我们用它生成往往能快速配制出最佳的、理想的脚手架 我通常使用 cli 生成项目骨架再在之基础上进行个人修改。 什么是 CLI 命令行界面(英语:command-li...

    qieangel2013 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<