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

news2024/11/15 17:23:38

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

在这里插入图片描述


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

目录

  • CLI工具是什么
  • 操作步骤
    • 创建项目
    • 创建可执行文件
    • package.json中设置bin入口文件
    • 运行npm link
    • 发布到npm
      • 登录npm
    • 通过命令安装CLI工具
  • 至此,艺术已成
  • 书籍推荐
    • 书籍名称:《Ubuntu Linux运维从零开始学》
    • 内容介绍
    • 适合人群
    • 如何领书
      • 方式一 博客送书
      • 方式二 公众号送书
      • 方式三 粉丝群送书
    • 自主购买
  • 最后

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

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1932142.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[Tensor学习]你不得不知道的知识点-切点-反转

wait...突然发现了一个错误: 在tensor里面只有size相同才允许相加, 如果想要相连接: PS: 如果tensor是多维的,比如说 a Tensor([1,2,3], [4,5,6]) 那么有 a[ : , :] a a[0,0] 1 a[ 第一维 ,第二维] ...…

乘积量化pq:将高维向量压缩 97%

向量相似性搜索在处理大规模数据集时,往往面临着内存消耗的挑战。例如,即使是一个包含100万个密集向量的小数据集,其索引也可能需要数GB的内存。随着数据集规模的增长,尤其是高维数据,内存使用量会迅速增加&#xff0c…

MAC地址电脑的“身份证”

在电脑的世界里,每个设备都有一个独一无二的标识,就像我们的身份证号码一样。 这个标识被称为MAC地址(Media Access Control Address),它是网络设备硬件的唯一识别码。 MAC地址由12个十六进制数字组成,通…

区块链资料

Quantstamp - Public Security Assessments smart-contract-sanctuary-bsc/contracts/mainnet at master tintinweb/smart-contract-sanctuary-bsc GitHub https://github.com/slowmist/Cryptocurrency-Security-Audit-Guide/blob/main/README_CN.md sFuzz: 高效自适应的智…

ArkUI组件——循环控制/List

循环控制 class Item{name: stringprice:number}private items:Array<Item> [new Item("A0",2399),new Item("BE",1999),new Item("Ro",2799)] ForEach(this.items,(item:Item) > {})List组件 列表List是一种复杂的容器&#xff0c;…

小程序里面使用vant ui中的vant-field组件,如何使得输入框自动获取焦点

//.wxml <van-fieldmodel:value"{{ userName }}"placeholder"请输入学号"focus"{{focusUserName}}"/>// .js this.setData({focusUserName: true});vant-field

postgresql删除用户

背景 **角色与用户**&#xff1a;在 PostgreSQL 中&#xff0c;用户和组的概念是通过“角色”来统一实现的。角色可以有登录权限&#xff08;在这种情况下&#xff0c;它们通常被称为“用户”&#xff09;&#xff0c;也可以没有&#xff08;在这种情况下&#xff0c;它们通常用…

网络请求之代理proxy

为什么要用代理呢&#xff1f;这个就涉及到安全问题了&#xff0c;你要是用一个IP频繁的访问人家网站&#xff0c;这不就是在搞事情么&#xff0c;人家网站肯定得把你的IP禁掉。所以我们爬虫的时候就得经常换IP&#xff0c;就是拿别人的IP不同人的IP访问网站去爬取数据。 我们…

AQS源码解析(ReentrantLock)

什么是AQS:Juc中的大多数同步器都是围绕着一些相同的基础行为&#xff0c;比如等待队列&#xff0c;条件队列&#xff0c;共享&#xff0c;独占获取变量这些行为&#xff0c;抽象出来就是基于AQS&#xff08;AbstractQueuedSynchronizer&#xff09;实现的。所以可以把AQS看成这…

昇思学习打卡-18-LLM原理与实践/MindNLP ChatGLM-6B StreamChat

文章目录 模型介绍技术特点运行效果 模型介绍 ChatGLM-6B模型是一个开源的、支持中英双语的对话语言模型&#xff0c;由清华大学和智谱AI联合研发。 技术特点 模型量化技术&#xff1a;ChatGLM-6B结合了模型量化技术&#xff0c;使得用户可以在消费级的显卡上进行本地部署。…

C++动态内存的管理

今天来分享C动态内存管理相关知识&#xff0c;闲言勿谈&#xff0c;直接上干货。 1. 动态内存的开辟和销毁(new和delete) (1)前置知识&#xff1a;我们知道c语言有malloc和calloc和realloc三个函数可以进行动态的开辟内存&#xff0c;那么它们有什么区别呢&#xff1f;首先是…

Module2 DRC Basics

材料链接 calibre_rule_writing_2007 - 道客巴巴https://www.doc88.com/p-330763936895.html Calibre DRC介绍 Calibre nmDRC流程 找寻,查看,纠正DRC冲突的一个完整的过程: 从Layout输入,加上svrf文件,一起输入进nmDRC软件; 输出DRC result数据,summary report,tr…

【经验分享】关于静态分析工具排查 Bug 的方法

文章目录 编译器的静态分析cppcheck安装 cppcheck运行 cppcheck 程序员的日常工作&#xff0c;不是摸鱼扯皮&#xff0c;就是在写 Bug。虽然这是一个梗&#xff0c;但也可以看出&#xff0c;程序员的日常一定绕不开 Bug。而花更少的时间修复软件中的 Bug&#xff0c;且不引入新…

第4章 Express路由的深入理解(二)

4 路由分组 路由分组用于将相关的路由组织在一起&#xff0c;使代码更具模块化和可维护性。可以通过使用 express.Router 创建路由组。 示例&#xff1a; const express require(express); const app express(); const apiRouter express.Router(); const userRouter ex…

【青书学堂】2024年第一学期 保险理论与实务(高起专) 作业

【青书学堂】2024年第一学期 保险理论与实务(高起专) 作业 为了方便日后复习&#xff0c;青书学堂成人大专试题整理。 若有未整理的课程&#xff0c;请私信我补充&#xff0c;欢迎爱学习的同学们收藏点赞关注&#xff01;文章内容仅限学习使用&#xff01;&#xff01;&#xf…

debian 实现离线批量安装软件包

前言 实现在线缓冲需要的软件和对应依赖的包&#xff0c;离线进行安装 &#xff0c;用于软件封装。 测试下载一个gcc和依赖环境&#xff0c;关闭默认在线源&#xff0c;测试离线安装gcc和依赖环境 兼容 debian ubuntu/test 测试下载安装包到目录 vim /repo_download.sh #!…

每日练习,不要放弃

目录 题目1.下面叙述错误的是 ( )2.java如何返回request范围内存在的对象&#xff1f;3.以下代码将打印出4.下列类定义中哪些是合法的抽象类的定义&#xff1f;&#xff08;&#xff09;5.以下代码段执行后的输出结果为6.以下代码运行输出的是总结 题目 选自牛客网 1.下面叙述…

几何相关计算

目录 一、判断两个矩形是否相交 二、判断两条线段是否相交 三、判断点是否在多边形内 四、垂足计算 五、贝塞尔曲线 六、判断多边形顺时针还是逆时针 七、判断凹多边形 一、判断两个矩形是否相交 当矩形1的最大值比矩形2的最小值都小&#xff0c;那矩形1和矩形2一定不相…

ollama + fastgpt 搭建免费本地知识库

目录 1、ollama ollama的一些操作命令: 使用的方式: 2、fastgpt 快速部署: 修改配置: config.json: docker-compose.yml: 运行fastgpt: 访问OneApi: 添加令牌和渠道: 登陆fastgpt,创建知识库和应用 3、总结: 附录: 1. 11434是ollama的端口: 2. m3e 测…

SCI成稿丨计算机结合,中三区

Web服务器在慢速DDoS攻xxx改进研究互联网技术下基于xxx智能化交互空间艺术研究智慧城市视角企业经济发展中节xxxxx无线网络遥感图像xxx设计和规划中的应用分析基于智能物联网的生态养老控制系统与xxx展基于心理行为大数据分类算法的心理xxxxxxxxxx终端技术对消费者行为分析及客…