java license授权工具_"私人定制"CLI工具

e26244ce6f34ea488133bcc5511496a7.png

1 前言

本文面向有JavaScript开发经验且希望入门CLI工具制作的开发人员。文中没有太多理论知识,通过从0到1开发一个简单的CLI工具,分享了CLI工具的开发、发布流程。看完本文,你可以学会如何"私人定制"一个CLI工具来提升开发效率。

总之,简单,实用,有趣。

2 什么是CLI工具

维基百科是这样定义CLI的

CLI(Command-line Interface),命令行界面,指通过输入字符组成的命令行进行操作的用户界面。

常见的CLI工具举例

  • 系统命令:cd、mkdir、ifconfig
  • 脚手架工具:create-react-app、vue-cli、yeoman
  • 预处理器:less、sass、babel
  • 测试工具:mocha、karma、wrk
  • 构建工具:webpack、gulp、grunt

3 为什么要自己开发CLI工具

举例,如果想查看本机ip地址,通常我会使用ifconfig命令,如图

c6442f9ccbd2d9b6bb0e2980462b2a37.png
ifconfig执行结果

执行命令后系统输出了一堆信息,从这堆信息中找到ip地址大概需要花5秒时间,这不是我想要的。我希望的结果是这样的

0a6f76bf91a36f06b7fe81aa626b4626.png
ip执行结果

输入ip命令,直接得到本机ip地址,1秒搞定,简单快捷。

理想很丰满,现实很骨感。真实的情况是:当我在终端敲下ip命令时,系统给我的反馈是"command not found:ip"。

4d80db53824d20159f4050183fb53bcc.png
ip执行结果

很显然,系统并没有为我提供ip这个命令,所以我们需要自己来实现它。

4 开始开发CLI工具

4.1 第一步:确保安装了Node.js

bf8f4aebbe833bca28e58f48b8a53f86.png
node版本检测

4.2 第二步:编写脚本、测试运行

创建文件夹ip-cli,并新建index.js

mkdir ip-cli && cd ip-cli
touch index.js

编辑index.js,内容如下

const os = require("os")
const ip = os.networkInterfaces().en0[1].address
const options = process.argv.slice(2)
if (options[0] === '-v') {
    console.log('v1.0.0')
} else {
    console.log(`your ip is: ${ip}`)
}

执行node index.js,结果如下

1c9a719246a3d0562a3d7e622b8168b1.png
执行脚本

4.3 声明执行环境

执行which env

9ce25bf020b015645e74f5fc07e9ca0a.png
which env

将返回的结果设置到index.js脚本的第一行,并指定脚本的解释器为node

然后,代码就变成了下面这样

#!/usr/bin/env node
​
const os = require("os")
const ip = os.networkInterfaces().en0[1].address
const options = process.argv.slice(2)
if (options[0] === '-v') {
    console.log('v1.0.0')
} else {
    console.log(`your ip is: ${ip}`)
}

代码中的#!被称为Shebang,是用来告诉编译器用什么命令执行文件的。Shebang的一些具体用法罗列如下

1、如果脚本文件中没有 #!这一行,那么执行时会默认采用当前Shell去解释这个脚本(即: $SHELL环境变量)。
2、如果 #!之后的解释程序是一个可执行文件,那么执行这个脚本时,它就会把文件名及其参数一起作为参数传给那个解释程序去执行。
3、如果 #!指定的解释程序没有可执行权限,则会报错“bad interpreter: Permission denied”。如果 #!指定的解释程序不是一个可执行文件,那么指定的解释程序会被忽略,转而交给当前的SHELL去执行这个脚本。
4、如果 #!指定的解释程序不存在,那么会报错“bad interpreter: No such file or directory”。注意: #!之后的解释程序,需要写其绝对路径(如: #!/bin/bash),它是不会自动到 $PATH中寻找解释器的。
5、当然,如果你使用类似于”bash test.sh”这样的命令来执行脚本,那么 #!这一行将会被忽略掉,解释器当然是用命令行中显式指定的bash。
6、脚本文件必须拥有可执行权限。

env可以在系统的PATH目录中查找脚本解释器安装目录。

添加#!/usr/bin/env node是告诉系统,这个脚本使用Node.js来执行。这样我们就可以简化命令,执行index.js直接得到ip地址,不需要显式的调用node index.js

4.4 分配执行权限

在我们直接执行index.js后,结果如下

4dc8ad49797b539083f21d2da59f30c5.png
执行index.js

我们并没有得到ip地址,查看文件发现index.js没有可执行权限。

d1958c02ee90ab0c96fc7c5f980d1a83.png
查看文件

执行chmod +x index.js给脚本分配可执行权限,然后index.js就可以执行了。

12de7f314d62ffd6328b0e60dbf001ca.png
增加可执行权限

4.5 设置环境变量

执行$PATH查看环境变量

c2a723d1a8cc35eacbcaf1efe179c904.png
PATH

可以看到我电脑的PATH变量为

/usr/local/mongodb/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:“/usr/libexec/java_home”::/platform-tools:/tools:“/usr/libexec/java_home”:“/usr/libexec/java_home”/bin:/usr/local/mongodb/bin:/Users/qianxuemin/bin/

这里usrUnix System Resource,而不是User, 通常/usr/bin下面的都是系统预装的可执行程序,会随着系统升级而改变, /usr/local/bin目录是给用户放置自己的可执行程序的地方,推荐放在这里,不会被系统升级而覆盖同名文件。如果两个目录下有相同的可执行程序,谁优先执行受到PATH环境变量的影响,比如我的电脑PATH变量中,/usr/local/bin优先于/usr/bin

接下来执行ln index.js /usr/local/bin/ip,创建index.js的一个硬链接文件/usr/local/bin/ip,如图

f399b29031aebf83ab949666d849ab07.png
ln

然后就可以直接使用自定义的命令ip了 。

921073b55f15c6170fd7722162273a43.png
ip

如果只是自己使用,那么一个简单的CLI工具就开发完毕了,但作为一名喜欢分享的童鞋,我希望可以把这个CLI工具分享给他人。

这时候可以选择使用npm管理项目,与他人共享开发成果。为了演示在npm项目中开发CLI工具的流程,我们暂时先删除刚才的命令ip

4e125b312f2527b2087671fcfeb46723.png
删除命令

5 使用npm 管理项目

5.1 初始化npm项目

执行npm init -y将项目初始化为npm项目

6719c56c0d236568fe1786e289776b8f.png
初始化

目录结构如下

.
├── index.js
└── package.json

5.2 设置bin字段

package.json中设置bin字段,定义一个命令ip并指定该命令执行./index.js文件

{
  "name": "ip-cli",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "bin": {
    "ip": "./index.js"
  },
  "scripts": {
    "test": "echo "Error: no test specified" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC"
}

5.3 测试CLI工具

执行npm link ,在全局的 node_modules下生成一个符号链接

71bf7e5de889c5394394090c63b100f0.png
npm link

然后就可以在全局使用 package.jsonbin 字段定义的命令ip了,执行ip命令结果如下

f181d3302af33b05c0289cd759d3b47b.png
ip

输出了本机IP地址,测试成功。

5.4 发布CLI工具

执行npm login 登录账号,登录成功后执行npm whoami可以看到npm用户名

1c8a4c3e4573a0dce2519034e449be3f.png
npm whoami

确认无误后执行 npm publish发布npm包。

发布包的时候需要确保包的名字没有被占用,如下是包名冲突的情况

2f0f145c27f6b5de2ca68101915a2a76.png
npm publish

遇到这种情况可以选择换个名字或者加scope,如下我给包名增加scope,将包名由ip-cli改为@qianxuemin/ip-cli

{
  "name": "@qianxuemin/ip-cli",
  "version": "1.0.2",
  "description": "",
  "main": "index.js",
  "bin": {
    "ip": "./index.js"
  },
  "scripts": {
    "test": "echo "Error: no test specified" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC"
}

加了scope后,发布包的时候需要设置访问级别,我们设置为公开

3e7c08897b49238a30b4c290479e3b6f.png
npm publish

发布成功后,其他开发人员就可以通过npm install @qianxuemin/ip-cli -g 安装并使用了。

ce7825f40768cb9aaf6209ff4d008f41.png
ip

至此,一个简单的CLI工具开发、发布完成。

6 注意事项

上面演示了CLI工具的整体开发、发布流程,没有对细节做太多说明。如下总结了在日常开发CLI工具中需要注意的事项与大家分享:

1、工具应当包含完整的README.md

2、工具应当包含helpversion信息

3、工具应当包含运行指示,比如加载中

4、发布之前要到 https://www.npmjs.com 查找一下自己的包名有没有被占用,如果被占用需要先修改包名或加scope

5、发布包时,可以通过在项目中添加.npmignore.gitignore文件限制发布的文件内容,.npmignore优先级高于.gitignore。或者在 package.jsonfiles 字段设置发布哪些文件或目录,它的优先级高于 .npmignore.gitignore

7 开发CLI工具常用的库

相比原生Node.js,使用一些开源模块能够简化CLI工具的开发,提高开发效率。如下是开发CLI工具常用的模块:

  • commander: 注册、解析命令行参数
  • Inquirer: 让命令行与用户进行交互
  • chalk: 给命令行字符加颜色
  • shelljs: 跨平台调用shell命令的node封装
  • Ora: 命令行提示图标
  • progress: 命令行进度条
  • blessed-contrib: 命令行可视化组件
  • download-git-repo:拉取git仓库源代码

由于文章篇幅有限,这里就不一一进行介绍了,使用时可以直接到 https://www.npmjs.com/搜索。

8 总结

本文通过一个简单的例子分享了CLI工具的开发、发布流程,并总结了一些开发注意事项和常用的库。旨在帮助JavaScript开发人员入门CLI工具开发。希望大家都能在掌握CLI工具开发流程后,发挥想象力,开发出一些实用、好玩的东西,让我们的开发变得高效、有趣。

9 参考资料

  • npm官网:https://www.npmjs.com.cn/
  • Shebang:https://zh.wikipedia.org/wiki/Shebang
  • Shebang:https://blog.csdn.net/u012294618/article/details/78427864
  • awesome-nodejs:https://github.com/sindresorhus/awesome-nodejs#command-line-apps
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 泛微 license检查工具_e9是一款基于Java语言开发的软件,旨在检查企业中使用的泛微OA软件的授权情况。该工具可以检测出已授权的企业使用泛微OA的情况,也可以及时发现未授权的使用情况,保障了企业的授权合法性和软件使用安全。 该工具的使用方法简单易懂,只需要按照提示输入相应的信息即可进行检查。同时,该工具还会自动生成检查报告,将检查结果以表格和图形化方式展示出来,方便企业管理员进行查看和管理。此外,该工具支持批量检查,轻松应对企业规模大、用户众多的情况。 泛微 license检查工具_e9是泛微公司为了防止盗版和非法使用,保障授权合法性而推出的一项重要工具。它不仅能够提高企业对于泛微OA软件的管理和监控,也为企业节省了成本和时间。因此,如果您在企业中使用泛微OA软件,请务必使用该工具检查授权情况。 ### 回答2: 泛微 license检查工具_e9是一款用于检查泛微OA系统license文件是否被篡改或者过期的工具。在企业管理信息系统中,泛微OA是一个比较流行的办公协同平台,为企业提供了多种业务操作和数据共享的高效方式。 然而,泛微OA的license文件可能会被人为修改,导致出现一些潜在的安全问题。为了避免这些问题的发生,泛微公司推出了这款检查工具。它可以对泛微OA系统的license文件进行检测,查看文件的有效期、模块版本、加密方式和授权信息等,确保license文件的完整性和可靠性。 此外,泛微 license检查工具_e9还具有以下特点: 1、简单易用:只需输入泛微OA系统的license文件路径即可进行检查,检查结果直观易懂。 2、支持多种泛微产品:可以对泛微OA、泛微HR等多种泛微产品进行license检查。 3、高效准确:采用了先进的加密算法,可以准确地判断license文件是否被篡改或者过期。 总之,泛微 license检查工具_e9是泛微OA系统管理不可或缺的一款工具,它可以帮助企业及时发现问题并进行解决,确保系统的正常运行和数据安全。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值