CLI 命令行工具是很常见的应用,之前会用 Golang/Rust 等语言构建过一些 CLI 工具,但是这次将基于 Node.js 构建一个 CLI 命令行工具,同时将其发布到官方的 NPM Registry npmjs.com 上,方便其他人可以下载使用。
功能介绍
使用 CLI 命令行工具发送飞书群机器人消息。
lark-notify https://open.feishu.cn/open-apis/bot/v2/hook/{key} Hello World
构建二进制项目
初始化项目
先新建一个项目目录,同时使用 npm init
进行初始化项目
mkdir node-lark-notify
cd node-lark-notify
npm init -y
进入项目目录下,创建一个 bin
目录,并在 bin
目录下创建一个 index.js
文件,这是 CLI 命令行工具的入口文件,先来打印一个 Hello World
:
#!/usr/bin/env node
console.log('Hello World');
CLI 项目基础配置
{
"bin": {
"lark-notify": "bin/index.js"
}
}
本地安装
通过上面的配置,我们就可以在本地安装这个项目,然后执行二进制命令:
sudo npm install -g .
安装成功后,我们可以执行 lark-notify
命令行工具,这个命令行工具会输出一个 Hello World
:
$ lark-notify
Hello World
完善项目功能
由于需要请求飞书机器人的 webhook_url,所以我们选择安装 node-fetch
依赖用于请求接口
npm install node-fetch
完善功能代码如下:
#!/usr/bin/env node
import fetch from "node-fetch";
const lark_notify = async (webhookUrl, msg) => {
const data = {
msg_type: "text",
content: {
text: msg
}
}
const response = await fetch(webhookUrl, {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(data)
});
return response.json();
}
const main = () => {
if (process.argv.length <= 3) {
console.log("Usage: lark-notify <webhookUrl> <message>");
return;
}
const webhookUrl = process.argv[2];
const msg = process.argv.slice(3).join(" ");
lark_notify(webhookUrl, msg).then(res => {
console.log(res);
})
}
main()
重新在本地安装:
sudo npm install -g .
现在来使用一下:
lark-notify https://open.feishu.cn/open-apis/bot/v2/hook/01e26b08-2095-4b55-86c6-cd897e8d0e93 Hello World
发布到官方 NPM Registry
为了可以让更多人用到我们的项目,我们可以将项目发布到官方 NPM Registry,这样其他人就可以下载使用了。
首先,登录 npm:
$ npm login
npm notice Log in on https://registry.npmjs.org/
Username: k8scat
Password:
Email: (this IS public) [email protected]
Enter one-time password from your authenticator app: 010212
Logged in as k8scat on https://registry.npmjs.org/.
使用 npm publish
发布项目,这里需要指定参数 --access public
以表示这个项目是公开的:
$ npm publish --access public
npm notice
npm notice 📦 @k8scat/[email protected]
npm notice === Tarball Contents ===
npm notice 57B .editorconfig
npm notice 1.1kB LICENSE
npm notice 329B README.md
npm notice 678B bin/index.js
npm notice 810B package.json
npm notice === Tarball Details ===
npm notice name: @k8scat/node-lark-notify
npm notice version: 1.0.2
npm notice filename: @k8scat/node-lark-notify-1.0.2.tgz
npm notice package size: 1.8 kB
npm notice unpacked size: 3.0 kB
npm notice shasum: aba3806ac3c5c3ba1387a938e861486e7b72e9f2
npm notice integrity: sha512-9NLDgX2t8dWhv[...]4sp2PIkzZThJQ==
npm notice total files: 5
npm notice
+ @k8scat/[email protected]
现在就可以在官方 NPM Registry 上搜索 @k8scat/node-lark-notify
这个项目了,同时可以在本地安装这个 CLI 工具:
sudo npm install -g @k8scat/node-lark-notify
使用 lark-notify
命令行工具发送消息:
lark-notify https://open.feishu.cn/open-apis/bot/v2/hook/{key} Hello World
项目开源
node-lark-notify 项目已经开源了,欢迎大家在 GitHub 上点赞或者提交 PR。