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) k8scat@gmail.com
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/node-lark-notify@1.0.2
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/node-lark-notify@1.0.2

现在就可以在官方 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。
