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

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

在这里插入图片描述


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

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

CLI工具是什么

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

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


操作步骤

创建项目

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

创建可执行文件

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

#!/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入口文件

{
  "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"
  }
}

运行npm link

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

npm link

在这里插入图片描述

发布到npm

npm publish

这一步操作操作即发布成功了,如下图
在这里插入图片描述

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

登录npm

npm adduser

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

通过命令安装CLI工具

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

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 公众号【鲲志说】

在这里插入图片描述

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-17 20:20:01       66 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-17 20:20:01       70 阅读
  3. 在Django里面运行非项目文件

    2024-07-17 20:20:01       57 阅读
  4. Python语言-面向对象

    2024-07-17 20:20:01       68 阅读

热门阅读

  1. 前端面试题日常练-day94 【Less】

    2024-07-17 20:20:01       22 阅读
  2. Linux第一章课后作业

    2024-07-17 20:20:01       24 阅读
  3. 免费服务器和付费服务器哪个更好?

    2024-07-17 20:20:01       22 阅读
  4. 云服务器,nginx访问失败,安全组,0.0.0.0/0

    2024-07-17 20:20:01       21 阅读
  5. 网络安全工作者如何解决网络拥堵

    2024-07-17 20:20:01       21 阅读
  6. docker network(docker网络)介绍

    2024-07-17 20:20:01       23 阅读
  7. 【C语言】条件运算符详解 - 《 A ? B : C 》

    2024-07-17 20:20:01       25 阅读