【送书活动十期】从零开始node.js制作CLI工具

这篇博客的由来是源于工作中一个java项目的配置项是加密后的私钥,私钥是由其他项目中调用web3生成随机账号得到的,而加密方法只是简单在java项目中执行代码得到。这便导致两步操作有点割裂,需要有一个脚本来完成生成私钥和加密私钥,减少重复操作且方便不同服务器执行。


【好看的灵魂千篇一律,有趣的鲲志一百六七!】- 可查看详情~~ 作者:鲲志说 (公众号、B站同名,视频号:鲲志说996) 后端研发:java、go,前电商、现web3 博客专家:阿里云社区、CSDN博客专家 超级个体:COC杭州开发者社区主理人 AI爱好者: AI电影共创社杭州核心成员 科技博主:极星会 星辉大使


目录

由于是将java代码中的逻辑搬到了js上,所以考虑到了制作CLI工具

CLI工具是什么

CLI 工具,即命令行界面(Command-Line Interface)工具,是一种允许用户通过文本命令与计算机程序或操作系统交互的界面。CLI 工具通常在终端或控制台窗口中运行,用户输入文本命令来执行特定的操作或获取信息。

简单理解是一种通过命令行来在运行一些代码,来实现某些功能的工具或者应用。可以减少开发中的一些低级重复劳动,或者规范开发工作流,提高开发效率。


操作步骤

创建项目

  • 创建一个新的项目目录
bash 复制代码
mkdir generateEthKeys
  • 进入项目目录后,初始化npm
bash 复制代码
npm init -y

创建可执行文件

可执行文件即真正的代码逻辑文件,如我是加解密的代码,则创建了generateEthKeys.js文件,代码内容不需要解释了,注释应该很清晰了。

javascript 复制代码
#!/usr/bin/env node

console.log('Hello, CLI world!');

const CryptoJS = require('crypto-js');
const Web3 = require('web3');
const web3 = new Web3(Web3.givenProvider || 'http://localhost:8545');

// AES 加密密钥,长度必须为16字节
const AES_KEY = 'kunzhiSayNodeCLI';

// 生成随机私钥
const account = web3.eth.accounts.create();
const privateKey = account.privateKey;

// 加密
const encryptedPrivateKey = encrypt(privateKey, AES_KEY);
console.log('Encrypted Private Key:', encryptedPrivateKey);

// 解密
const decryptedPrivateKey = decrypt(encryptedPrivateKey, AES_KEY);
console.log('Decrypted Private Key:', decryptedPrivateKey);

// 获取地址
const address = account.address;
console.log('Address:', address);

function encrypt(data, key) {
    const keyBytes = CryptoJS.enc.Utf8.parse(key);
    const dataBytes = CryptoJS.enc.Utf8.parse(data);
    const encrypted = CryptoJS.AES.encrypt(dataBytes, keyBytes, {
        mode: CryptoJS.mode.ECB,
        padding: CryptoJS.pad.Pkcs7
    });
    return encrypted.toString();
}

function decrypt(data, key) {
    const keyBytes = CryptoJS.enc.Utf8.parse(key);
    const decrypted = CryptoJS.AES.decrypt(data, keyBytes, {
        mode: CryptoJS.mode.ECB,
        padding: CryptoJS.pad.Pkcs7
    });
    return decrypted.toString(CryptoJS.enc.Utf8);
}

package.json中设置bin入口文件

json 复制代码
{
  "name": "generateethkeys",
  "version": "1.0.0",
  "description": "",
  "main": "generateEthKeys.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "bin": {
    "generateethkeys": "./generateEthKeys.js"
  },
  "dependencies": {
    "commander": "^12.1.0"
  }
}

希望全局安装这个CLI工具并在任何地方使用它,可以使用以下命令在本地测试:

bash 复制代码
npm link

发布到npm

bash 复制代码
npm publish

这一步操作操作即发布成功了,如下图

当然,这一步是需要确保我们已经注册并登录了npm,如果没有登录,就会出现下图问题,说明需要先登录,可以继续参考下面的操作

登录npm

bash 复制代码
npm adduser

执行完这一步命令后,会提示你依次输入Username、Password、Email和一次性登录密码

通过命令安装CLI工具

其他用户可以通过以下命令安装我们的CLI工具

bash 复制代码
npm install -g generateEthKeys

至此,艺术已成

登录npm查看


书籍推荐

《Ubuntu Linux运维从零开始学》详解Ubuntu安装、文件系统基础、文件和目录管理、用户和权限管理、系统启动和关闭、服务和进程管理、软件包管理、磁盘和文件系统管理、文本编辑器、网络管理、系统和网络安全、文件服务器Samba、FTP文件传输服务、NFS网络文件服务、NTP服务的搭建与应用、DNS域名服务、DHCP动态主机配置协议、Nginx服务搭建、Tomcat服务搭建与应用、LAMP搭建、Jenkins服务搭建与应用、Zabbix监控系统搭建与应用、Ansible配置与应用。

书籍名称:《Ubuntu Linux运维从零开始学》

内容介绍

Ubuntu Linux是目前最流行的Linux操作系统之一。Ubuntu的目标在于为一般用户提供一个最新的、相当稳定的、主要由自由软件构建而成的操作系统。Ubuntu具有庞大的社区力量,用户可以方便地从社区获得帮助。《Ubuntu Linux运维从零开始学》详解Ubuntu Server 22.04运维基础和常用工具,配套PPT课件和作者QQ群答疑服务。

全书共分24章,内容包括了解Linux、安装Ubuntu、文件系统基础知识、文件和目录管理、用户和权限管理、系统启动和关闭、服务和进程管理、软件包管理、磁盘和文件系统管理、文本编辑器、网络管理、系统和网络安全、Samba文件服务器、FTP文件传输服务、NFS网络文件服务、NTP服务搭建与应用、DNS域名服务、DHCP动态主机配置协议、Nginx服务的搭建、Tomcat服务搭建与应用、LAMP的搭建、Jenkins服务搭建与应用、Zabbix监控系统搭建与应用、Ansible配置与应用。

适合人群

  • 适合Ubuntu Linux初学者、Ubuntu运维人员、Ubuntu应用开发人员。
  • 本书也适合作为高等院校或高职高专Linux课程的教材。

如何领书


⚠️:三种送书方式可以重复叠加获奖🏆

方式一 博客送书

本篇文章送书 🔥1本 评论区抽1位小伙伴送书

📆 活动时间:截止到 2024-07-22 18:00:00

🎁 抽奖方式:利用网络公开的在线抽奖工具进行抽奖

💡 参与方式:关注、点赞、收藏 + 任意大于10个字的评论

方式二 公众号送书

关注公众号,参与抽奖,中奖即可送书 🔥2本

📆 活动时间:达到100 人参与时自动开奖,2024-07-22 18:00:00 截止

🎁 抽奖方式:利用抽奖小程序进行抽奖

💡 参与方式:关注微信公众号《鲲志说》,发送:我要学Ubuntu ,即可参与

或微信扫描下方图片

方式三 粉丝群送书

具体参与方式可➕kunzhi96或扫描下方二维码,体验更多白嫖书籍的玩法

自主购买

小伙伴也可以访问链接进行自主购买哦~

直达京东购买链接🔗:《Ubuntu Linux运维从零开始学》


最后

  • 好看的灵魂千篇一律,有趣的鲲志一百六七!
  • 如果觉得文章还不错的话,可以点赞+收藏+关注 支持一下,鲲志的主页 还有很多有趣的文章,欢迎小伙伴们前去点评
  • 如果有什么需要改进的地方还请大佬指出❌
  • 欢迎学习交流|商务合作|共同进步!
  • ❤️ kunzhi96 公众号【鲲志说】
相关推荐
起飞0019 分钟前
通过React实现萤石摄像头rtsp地址格式的视频流的web展示
前端·react.js·前端框架·node.js
催催121 小时前
无线领夹麦克风行业乱象专业揭晓:避免音频失真等潜在危害
网络·人工智能·经验分享·智能手机·音视频
Niuagha1 小时前
联想小新 Pro 16:AI启航版,定义笔记本性能新高度
经验分享
程序者王大川1 小时前
【MySQL】索引优化:怎么通过IN查询2000个参数?
数据库·学习·mysql
Cosmos复调2 小时前
黑马JavaWeb开发笔记07——Ajax、Axios请求、前后端分离开发介绍、Yapi详细配置步骤
java·前端·笔记·vscode·ajax·yapi·软件工程
wuziNO_12 小时前
C++ 基础学习
c++·学习·算法
犬余2 小时前
Kafka入门:从零开始了解分布式流处理平台
笔记·分布式·学习·kafka
增删改查农民工2 小时前
Datawhale AI夏令营第五期学习!
人工智能·学习
测试开发技术2 小时前
6.2K star!推荐一款开源混沌工程测试平台:Chaos Mesh
开源
mit6.8242 小时前
[Linux#47][网络] 网络协议 | TCP/IP模型 | 以太网通信
linux·运维·网络·笔记·网络协议