如何用node开发自己的cli工具
如何用node开发自己的cli工具
灵感
写这个工具的灵感以及场景源于youtube的一次闲聊
使用场景
原本我们写博客展示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的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
原型输入\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
的微服务小型实践,总之想做的事情真的很多。
关于我
庄文达:全栈开发攻城狮
- 就是爱学习,我还要刺激大家一起学习
如何用node开发自己的cli工具的更多相关文章
- 用node编写自己的cli工具
工作中接到新项目,开发前都需要先规划项目目录,然后一个个创建文件,搭建sass编译环境,下载jquery,Swiper等类库... 这些准备工作都要花上不少时间.每做一个项目,都会遇到同样的问题,再重 ...
- 如何用vs2013开发人员命令提示工具执行一个方法(一个简单的demo)
在任何一个编辑器中编写一个静态的Main方法,必须是静态且名为Main的方法,并将Main方法所在的类文件命名为yang.cs(这个名字随便命名),如图-1. 图-1 打开你的vs2013开发人员命令 ...
- node编写自己的cli
用node编写自己的cli工具 工作中接到新项目,开发前都需要先规划项目目录,然后一个个创建文件,搭建sass编译环境,下载jquery,Swiper等类库... 这些准备工作都要花上不少时间.每 ...
- ubuntu 18.04安装clojure工程的cli工具lein
官网的安装过程https://leiningen.org/#install 是文字描述,并不够lazy. 我仿照code,chrome nodejs的方式,给出下面的命令行安装过程 wget http ...
- 用node编写cli工具
cli是command-line interface的缩写,即命令行工具,常用的vue-cli, create-react-app, express-generator 等都是cli工具. 本文以自己 ...
- Node开发项目管理工具 Grunt 对比 Gulp
转自Gulp vs Grunt 1. Grunt -> Gulp 早些年提到构建工具,难免会让人联想到历史比较悠久的Make,Ant,以及后来为了更方便的构建结构类似的Java项目而出现的Mav ...
- 如何用node编写命令行工具,附上一个ginit示例,并推荐好用的命令行工具
原文 手把手教你写一个 Node.js CLI 强大的 Node.js 除了能写传统的 Web 应用,其实还有更广泛的用途.微服务.REST API.各种工具……甚至还能开发物联网和桌面应用.Java ...
- 用一次就会爱上的cli工具开发
本文转载自用一次就会爱上的cli工具开发 写在前面 最近接手任务--使用nodejs开发一个公司内部使用的cli工具,简而言之就是输入一行命令快速搭建好项目结构,也可以通过不同的命令引入不同的文件. ...
- 构建工具是如何用 node 操作 html/js/css/md 文件的
构建工具是如何用 node 操作 html/js/css/md 文件的 从本质上来说,html/js/css/md ... 源代码文件都是文本文件,文本文件的内容都是字符串,对文本文件的操作其实就是对 ...
随机推荐
- 国内npm镜像使用方法
npm全称Node Package Manager,是node.js的模块依赖管理工具.由于npm的源在国外,所以国内用户使用起来各种不方便.下面整理出了一部分国内优秀的npm镜像资源,国内用户可以选 ...
- 项目二、自定义文件上传函数(js函数)
/** * 文件上传工具 v1.0 * @param file 要上传的文件 * @param url 要上传到的路径 * @param div 要显示的区域 */ function uploader ...
- win7下面安装flex和bison
通过Cygwin工具进行安装 下载地址cygwin 安装截图: 搜索flex,选择相应的版本进行安装 搜索bison 然后下一步 安装完成后,将D:\cygwin64\bin路径添加到PATH环境变量 ...
- Tomcat 的work 目录
1 用tomcat作web服务器的时候,部署的程序在webApps下,这些程序都是编译后的程序(发布到tomcat的项目里含的类,会被编译成.class后才发布过来,源文件没有发布过来,但这里的 ...
- Vuex的安装、使用及注意事项
使用Vuex的步骤: (1)安装: 1.使用npm安装: 1 npm install vuex --save 2.使用script标签引入 1 2 3 <script src="/p ...
- 用Vue来实现音乐播放器(六):JSONP的封装
在npm上下载jsonp的包 这个包的用法 传入的参数是地址加上地址参数的混合 但是想封装一个将地址和地址参数分别传入的jsonp方法 所以来封装一个 import originJSONP from ...
- python抽象篇:面向对象基础
1.面向对象概述 面向过程编程:根据操作数据的函数或语句块来设计程序的. 函数式编程:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象编程:数据和功能结合起来,用称为对象的东西包 ...
- 002-使用Spring实现读写分离(MySQL实现主从复制)
一. 背景 一般应用对数据库而言都是“读多写少”,也就说对数据库读取数据的压力比较大主库,负责写入数据,我们称之为:写库:从库,负责读取数据,我们称之为:读库: 1. 读库和写库的数据一致:2. 写数 ...
- 阶段1 语言基础+高级_1-3-Java语言高级_03-常用API第二部分_第6节 基本类型包装类_1_包装类的概念
只有这两个比较特殊
- 阶段1 语言基础+高级_1-3-Java语言高级_04-集合_07 Collections工具类_2_Collections集合工具类的方法
默认规则一般都是升序排序 再来创建一个字符串的数组 排序后,按照升序输出结果 自定义类型排序 创建一个Person类,getter和setter 有参构造和无参构造 重写toString的方法 传对象 ...
- 用node编写自己的cli工具